2014-06-14 43 views
3

我嘗試在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

使用incr命令時,變量必須具有可被解釋爲整數的值。請參閱tcl wiki。 如果變量是一個非整數實數,[增量]無法使用,但[設置]可以:

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

puts $sum 
+2

嚴格來說,它是表達式中用於處理浮點加法運算的'+'運算符,而不是'set'(它只是將值寫入變量)。 –

3

Omsai的答案應該解決您的問題,而是一個更清潔的解決方案是使用foreach

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

這看起來更多補償:

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

總結數值的清單,也可以與::tcl::mathop::+命令完成授權它是。 +命令在常規名稱空間中不可用,因此您需要指定它的來源(::tcl::mathop名稱空間)。該命令期望將每個操作數作爲單獨的參數,因此如果它們在列表中,則需要使用前綴{*}來擴展該列表。

foreach和各種mathop命令記錄在這裏:foreachmathop

(注:在評論中提到的「Hoodiecrow」是我的,我用的是尼克更早。)

+0

'mathop'命令的文檔:http://tcl.tk/man/tcl8.5/TclCmd/mathop.htm –

+0

@glennjackman:哎呀,忘了鏈接到文檔,現在修復。謝謝你提醒我。 –

+0

謝謝Omsai,Glenn,Hoodiecrow。所有的解決方案對我來說都非常好。感謝您的快速響應。 – user3739573

0

的Tcl給出了一個錯誤,如果你會嘗試

incr a 1.5 

你必須改變的邏輯。

顯然你想添加列表中的所有數字。答案很簡單而且很多。但我會給你的最短途徑:

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

無循環REQUIRED。

+0

謝謝Vishwadeep – user3739573

相關問題