在tcl代码中,我想获得给定数字的小数部分。
我尝试了以下代码
set a 2.9999383
expr {fmod($a,1)} gives me 0.9999383000000002
如何在没有其他十进制数字的情况下获得正确的小数部分?
谢谢
答案 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
这将避免必须查看分数是否变形和/或需要取整。