为什么默认情况下 Tcl expr 命令 returns 整数?
Why does Tcl expr command returns integers by default?
为什么 Tcl expr
默认命令 returns 个整数?我已经阅读了 documentation(第 "Types, overflow and precision" 节),但是除了向结果添加 0.0 和类似内容之外,还有其他方法可以将 "make" expr 转换为 return float 吗?
例如,我正在学习 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
变为 return 浮动,或者我是否必须在各处插入 0.0 或 *.0 以确保获得我想要的结果?为什么会这样?
如果表达式中的任何数字是浮点数,它将 return 为浮点数。来自 expr 手册页:
For arithmetic computations, integers are used until some floating-point number is introduced, after which floating-point is used.
所以,你可以这样做:
puts "Your average score is: [expr {double($sum)/$counter}]";
另一种可能性是确保 sum
或 mark
已经是双精度数:
set sum 0.0
...
set sum [expr {$sum + $mark}]
为什么 Tcl expr
默认命令 returns 个整数?我已经阅读了 documentation(第 "Types, overflow and precision" 节),但是除了向结果添加 0.0 和类似内容之外,还有其他方法可以将 "make" expr 转换为 return float 吗?
例如,我正在学习 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
变为 return 浮动,或者我是否必须在各处插入 0.0 或 *.0 以确保获得我想要的结果?为什么会这样?
如果表达式中的任何数字是浮点数,它将 return 为浮点数。来自 expr 手册页:
For arithmetic computations, integers are used until some floating-point number is introduced, after which floating-point is used.
所以,你可以这样做:
puts "Your average score is: [expr {double($sum)/$counter}]";
另一种可能性是确保 sum
或 mark
已经是双精度数:
set sum 0.0
...
set sum [expr {$sum + $mark}]