预期的整数但得到了#34;浮点数"错误

时间:2014-06-14 02:50:51

标签: tcl

我尝试使用list在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

执行上述程序时,由于列表中的浮点值为1.5,我得到以下错误

expected integer but got "1.5"
    (reading increment)
    invoked from within
"incr sum [lindex $list $i]"

我在互联网上搜索,找不到任何相关内容。 请告知我如何处理浮点值?

3 个答案:

答案 0 :(得分:3)

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

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

puts  $sum

答案 1 :(得分:3)

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

set sum 0
foreach n $list {
    set sum [expr {$sum + $n}]
}
puts $sum

也可以使用::tcl::mathop::+命令来总结数值列表:

::tcl::mathop::+ {*}$list

这看起来更复杂。 +命令在常规命名空间中不可用,因此您需要指定它来自何处(::tcl::mathop命名空间)。该命令期望将每个操作数作为单独的参数获取,因此如果它们在列表中,则需要使用{*}前缀扩展该列表。

foreach以及各种mathop命令在此处记录:foreachmathop

(注意:评论中提到的'Hoodiecrow'是我,我之前使用过那个昵称。)

答案 2 :(得分:0)

如果您尝试

,Tcl会出错
incr a 1.5

你必须改变逻辑。

显然你想要添加列表中的所有数字。答案很简单很多。但我会以最短的方式给你:

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

无需循环。