在tcl中,如何获得给定数字的小数部分

在tcl中,如何获得给定数字的小数部分,tcl,Tcl,在tcl代码中,我想得到给定数字的小数部分 我尝试了以下代码 set a 2.9999383 expr {fmod($a,1)} gives me 0.9999383000000002 如何在不增加小数位数的情况下获得正确的小数部分 谢谢,浮动是不精确的估计。这些“额外数字”仅仅是系统试图在以2为基数的系统中逼近小数点的最佳结果 您可以舍入浮动以去除尾随的2: format "%.2f" $a 您可以使用字符串拆分,否则我猜: set a 2.9999383 set fraction "

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

我尝试了以下代码

set a 2.9999383 

expr {fmod($a,1)} gives me 0.9999383000000002
如何在不增加小数位数的情况下获得正确的小数部分


谢谢,浮动是不精确的估计。这些“额外数字”仅仅是系统试图在以2为基数的系统中逼近小数点的最佳结果

您可以舍入浮动以去除尾随的2:

format "%.2f" $a

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

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

这将避免看到分数是否变形和/或是否需要舍入。

您已经发现了使用浮点数的乐趣!诀窍是猜测浮点后面有多少位(不必太精确!),并将其与
格式
一起使用以进行舍入

format "%.*g" [string length $a] [expr {fmod($a, 1.0)}]
这将使用您的测试数据生成
0.9999383
,但对输入很少进行假设