在TCL中我如何得到给定数字的小数部分

时间:2019-05-22 05:54:42

标签: tcl

在tcl代码中,我想获得给定数字的小数部分。

我尝试了以下代码

set a 2.9999383 

expr {fmod($a,1)} gives me 0.9999383000000002

如何在没有其他十进制数字的情况下获得正确的小数部分?

谢谢

3 个答案:

答案 0 :(得分:2)

您已经发现浮点数带来的乐趣!技巧是猜测浮点之后有多少个数字(不必太准确!),然后将其与format一起使用以进行四舍五入。

format "%.*g" [string length $a] [expr {fmod($a, 1.0)}]

这会根据您的测试数据生成0.9999383,但对输入的假设很少……

答案 1 :(得分:0)

浮动是不准确的估计。这些“额外数字”仅仅是系统在以2为底的系统中尽最大可能近似十进制的结果。

您可以舍入浮点数以摆脱尾随的2:

format "%.2f" $a

答案 2 :(得分:0)

您可以使用字符串拆分,否则我猜:

set a 2.9999383
set fraction "0.[lindex [split $a "."] 1]"
puts $fraction
0.9999383

这将避免必须查看分数是否变形和/或需要取整。