Tcl 将数字舍入到小数点后2位

Tcl 将数字舍入到小数点后2位,tcl,rounding,Tcl,Rounding,我需要把一个数字四舍五入到小数点后两位。 现在,我猜下面的四舍五入到最接近的整数 puts [expr {round($total_rate)}] 如果我做了下面这样的事情,它就不起作用了。还有别的办法吗 puts [expr {round($total_rate,2)}] 范例 % set total_rate 1.5678 1.5678 % expr {double(round(100*$total_rate))/100} 1.57 % set total_rate 1.4321 1.4

我需要把一个数字四舍五入到小数点后两位。 现在,我猜下面的四舍五入到最接近的整数

puts [expr {round($total_rate)}]
如果我做了下面这样的事情,它就不起作用了。还有别的办法吗

puts [expr {round($total_rate,2)}]
范例

% 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

将小数位数四舍五入到特定位数的最简单方法是使用
格式

puts [format "%.2f" $total_rate]
请注意,如果您使用舍入值进行进一步计算,而不是向用户显示,则使用舍入到X小数位打印的大多数值在二进制算术中不会有精确的表示(Tcl内部使用二进制算术,就像大量其他编程语言一样)。最好保留四舍五入到特定的DPs数,直到您向人们显示值为止

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

通过使用格式,我们可以在输出中看到结果,但如何在程序中使用相同的值,即,我们可以在输出中看到1.448作为1.45,但我们可以在程序中使用1.45

proc tcl::mathfunc::roundto{value decimalplaces}{expr{round(10**$decimalplaces*$value)/10.0**$decimalplaces};expr{roundto($total_rate,2)}
不能将浮点四舍五入到任何大于零的小数位数。它没有小数点。它有二元位置,它们是不可通约的。您需要使用十进制基数,通常通过格式化程序。
puts [format "%.2f" $total_rate]