为什么Tcl expr
命令默认返回整数?我已经阅读了documentation(章节"类型,溢出和精确度"),但还有其他任何方式来制作"制作" expr返回float除了向结果添加0.0和类似的?
例如,我正在学习Tcl,我制作了一个简单的程序来计算平均值:
puts -nonewline stdout "Please enter scores: "
flush stdout;
set score [gets stdin];
set sum 0;
set counter 0;
foreach mark $score {
set sum [expr {$sum + $mark}];
incr counter;
}
puts "Your average score is: [expr {$sum/$counter}]";
举个例子:
Please enter scores: 1 2 4
Your average score is: 2
否则:
Please enter scores: 1 2 4.0
Your average score is: 2.333333333333335
expr
还有其他方式可以返回浮点数,还是我必须在此处插入0.0或* .0以确保我得到我想要的结果?为什么会这样呢?
答案 0 :(得分:3)
如果表达式中的任何数字是浮点数,它将返回一个浮点数。从expr手册页:
对于算术计算,使用整数直到引入某个浮点数,然后使用浮点数。
所以,你可以这样做:
puts "Your average score is: [expr {double($sum)/$counter}]";
另一种可能性是确保sum
或mark
已经是双倍:
set sum 0.0
...
set sum [expr {$sum + $mark}]