我正在使用tclsh8.4.19,使用tcl_precision 3打印的文本值最多为5位小数。即当我在tk gui中创建一个小部件时,文本值是uspto 5个小数位,我希望它们只有3位小数。
label $base.main.parameter($i).ParamValue($i,$j) -text "$myvalue" \
-font {times 11 bold} -relief sunken
现在,如果myvalue的值是.3456789,那么打印的文本是.3456789,我想要的值是 要打印的是.345。所以,我想过使用设置tcl_precision 3但没有成功。
我是否需要使用其他东西。请解释。
答案 0 :(得分:3)
TCL帮助文档警告不要改变tcl_precision;它以现代版本提供,仅用于向后兼容。要实现您需要的功能,format命令将是一个更好的选择:
set a 0.123456
format %.3lf $a
显示将数字转换为带有三位小数的字符串。
精度的绝对值可以用*替换,在这种情况下,先例取自format命令的下一个参数。
set precesion 3
set v 1.2345678
format %.*lf $precesion $v
1.235
有关使用format命令的完整详细信息,请参见其手册页,可找到一个在线版here
答案 1 :(得分:1)
要将值舍入到特定的小数位数以进行显示,请使用format
。
set a 0.123654
set rounded [format "%.3f" $a]
您也可以从变量中指定舍入位置:
set a 0.123654
set b 3
set rounded [format "%.*f" $b $a]
虽然它也同样可能(如果你不能强迫$b
成为一个整数可能不那么安全)来构造带有替换的格式字符串:
set rounded [format "%.${b}f" $a]