Tcl 应为整数,但得到;浮点数;错误

Tcl 应为整数,但得到;浮点数;错误,tcl,Tcl,我试图用列表在TCL中编写一个非常简单的程序 下面是清单 list { 1 2 3 4 5 6 1.5 7 } 下面是我的代码 set sum 0 for {set i 0} {$i < [llength $list]} {incr i} { incr sum [lindex $list $i] } puts $sum 设置总和0 对于{set i 0}{$i

我试图用列表在TCL中编写一个非常简单的程序

下面是清单

list { 1 2 3 4 5 6 1.5 7 }
下面是我的代码

set sum 0
for {set i 0} {$i < [llength $list]} {incr i} {
    incr sum [lindex $list $i]
}

puts  $sum
设置总和0
对于{set i 0}{$i<[llength$list]}{incr i}{
增量金额[lindex$list$i]
}
放入$sum
在执行上述程序时,由于列表中的浮点值为1.5,我得到以下错误

expected integer but got "1.5" (reading increment) invoked from within "incr sum [lindex $list $i]" 应为整数,但得到“1.5” (读数增量) 从内部调用 “增量总和[lindex$列表$i]” 我在网上搜索,找不到任何相关的东西。
请告知如何处理浮点值?

使用incr命令时,变量必须具有可解释为整数的值。看见 如果变量是非整数实数,[incr]不能使用,但[set]可以:

set sum 0
for {set i 0} {$i < [llength $list]} {incr i} {
    set sum [expr {$sum + [lindex $list $i]}]
}

puts  $sum
设置总和0
对于{set i 0}{$i<[llength$list]}{incr i}{
set sum[expr{$sum+[lindex$list$i]}]
}
放入$sum

Omsai的答案应该可以解决您的问题,但更干净的解决方案是使用
foreach

set sum 0
foreach n $list {
    set sum [expr {$sum + $n}]
}
puts $sum
也可以使用
::tcl::mathop::+
命令对数值列表求和:

::tcl::mathop::+ {*}$list
这看起来比实际情况更复杂。
+
命令在常规命名空间中不可用,因此需要指定它的来源(
::tcl::mathop
命名空间)。该命令希望将每个操作数作为单独的参数获取,因此如果它们位于列表中,则需要使用
{*}
前缀展开该列表

foreach
和各种
mathop
命令记录在这里:


(注意:评论中提到的“Hoodiecrow”是我,我在前面使用了nick。)

如果您愿意尝试,Tcl会给出一个错误

incr a 1.5
你必须改变逻辑

很明显,您希望添加列表中的所有数字。答案很简单,而且很多。但我会给你最短的路:

set l { 1 2 3 4 5 6 1.5 7 }
set sum [expr [join $l +]]

不需要循环。

严格来说,是表达式中处理浮点加法的
+
运算符,而不是
(它只是将值写入变量)。@glennjackman:oops,忘记链接到文档,现在已修复。谢谢你提醒我。谢谢Omasi,Glenn,Hoodiecrow。所有的解决方案对我来说都很有效。感谢您的快速回复。@user3739573,您可以接受Hoodiecrow的回答来表示感谢: