为什么Tcl expr命令默认返回整数?

时间:2015-07-29 14:19:37

标签: tcl

为什么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以确保我得到我想要的结果?为什么会这样呢?

1 个答案:

答案 0 :(得分:3)

如果表达式中的任何数字是浮点数,它将返回一个浮点数。从expr手册页:

  

对于算术计算,使用整数直到引入某个浮点数,然后使用浮点数。

所以,你可以这样做:

puts "Your average score is: [expr {double($sum)/$counter}]";

另一种可能性是确保summark已经是双倍:

set sum 0.0
...
set sum [expr {$sum + $mark}]