Tcl在求和时出错
我想计算tcl list p中存储的数字列表的平均值。以下是我的脚本:Tcl在求和时出错,tcl,Tcl,我想计算tcl list p中存储的数字列表的平均值。以下是我的脚本: set sum 0.0 foreach e $P { set sum [expr {$sum + $e}] } set avg [expr {1.0*$sum / [llength $P]}] 但是我有一个错误:不能使用非数字字符串作为“+”的操作数。 我怎么算数 您的问题可能是由于p中的某些元素不是数字。在任何情况下,这是计算平均值的方法: package require math::statistics ::math:
set sum 0.0
foreach e $P { set sum [expr {$sum + $e}] }
set avg [expr {1.0*$sum / [llength $P]}]
但是我有一个错误:不能使用非数字字符串作为“+”的操作数。
我怎么算数 您的问题可能是由于
p
中的某些元素不是数字。在任何情况下,这是计算平均值的方法:
package require math::statistics
::math::statistics::mean $P
假设p
是一个数字列表
如果您有一个数据项列表,并且想知道其中是否有任何数据项不适合expr
算法,您可以执行以下操作:
foreach n $data {
if {![string is double -strict $n]} {
error "$n is not a number"
}
}
这将报告第一个非数字。字符串是双精度的
命令可识别整数和浮点数1。如果省略-strict
标志,则空字符串将被视为一个数字(expr
仍将阻塞它,尽管2)
这将为您提供$data
中所有非数字项的子列表:
lmap n $data {
if {![string is double -strict $n]} {set n} continue
}
lmap n $data {
if {[string is double -strict $n]} {set n} continue
}
这将为您提供$data
中所有正确编号项目的子列表:
lmap n $data {
if {![string is double -strict $n]} {set n} continue
}
lmap n $data {
if {[string is double -strict $n]} {set n} continue
}
1名称“double”表示对于任何可以转换为C数据类型的字符串,它都返回true
double
,具体指双精度浮点数的存储(用于编码浮点数的行业标准)。如果你不知道那是什么,你可以假装它的意思是“看起来像整数的数字和看起来像实数的数字”
2expr
还将阻塞值NaN
,这是一个完全有效的浮点值,它只是代表“不是数字”
文档:,,,包,,什么是p?假定没有正确格式化的数字供解释器理解为数字。如果{[catch{set sum[expr{$sum+$e}]}{put“$e不是一个数字”}在循环中而不是在当前行中,您可以使用
?事实上,我在P中有非数字元素@爸爸,别忘了接受这个答案: