2012-04-18 31 views
9

Necesito redondear un número a dos decimales. En este momento las siguientes rondas al entero más cercano supongonúmero redondo a 2 decimales

puts [expr {round($total_rate)}] 

Si hago algo, como a continuación no funciona. ¿Hay otra forma de evitarlo?

puts [expr {round($total_rate,2)}] 
+0

No se puede redondear el punto flotante a cualquier cantidad de decimales mayor que cero. No tiene lugares decimales. Tiene lugares binarios, y son inconmensurables. Necesita usar una base decimal, generalmente a través de un formateador. – EJP

Respuesta

10
expr {double(round(100*$total_rate))/100} 

ejemplo

% set total_rate 1.5678 
1.5678 
% expr {double(round(100*$total_rate))/100} 
1.57 
% set total_rate 1.4321 
1.4321 
% expr {double(round(100*$total_rate))/100} 
1.43 
+2

'proc tcl :: mathfunc :: roundto {value decimalplaces} {expr {round (10 ** $ decimalplaces * $ value) /10.0 ** $ decimalplaces}}; expr {roundto ($ total_rate, 2)} ' –

12

La forma más sencilla para redondear a un número determinado de decimales es con format:

puts [format "%.2f" $total_rate] 

en cuenta que si usted está utilizando el valor redondeado para realizar más cálculos en lugar de mostrar a los usuarios, la mayoría de los valores que imprime mediante el redondeo a X lugares decimales no tendrá una representación exacta en aritmética binaria (que Tcl utiliza internamente, como un gran número de otros lenguajes de programación). Lo mejor es reservar el redondeo a un número específico de DP hasta el punto en que muestre valores a las personas.

1
puts [format "%.2f" $total_rate] 

Al utilizar el formato, podemos ver el resultado en la salida pero la forma de utilizar el mismo valor en el programa, es decir, podemos ver 1.448 como 1,45 en la salida, pero podemos usar 1,45 en el programa a continuación.

Cuestiones relacionadas