如何使用for循环将变量增加0.5?

时间:2014-05-14 11:20:29

标签: tcl

for {set i 0} {$i < 5} {incr i} {
    puts "I inside first loop: $i"
} 

是否可以将i增加.5而不是1?

现在上面的代码提供了以下输出:

  • 我在第一个循环中:0
  • 我在第一个循环中:1
  • 我在第一个循环中:2
  • 我在第一个循环中:3
  • 我在第一个循环中:4

但我需要这样的事情:

  • 我在第一个循环中:0
  • 我在第一个循环中:.5
  • 我在第一个循环中:1

......等等

2 个答案:

答案 0 :(得分:3)

默认情况下,incr在没有提及特定数字时递增1个单位。

incr i 2
每次迭代时,

会将i增加2。

incr i -1
每次迭代时,

会将i减1。

您可以将数字更改为您需要的数字。

唯一的问题是你只能增加一个整数。所以你必须使用0.5的其他东西。您可以使用expr吗?

for {set i 0} {$i < 5} {set i [expr {$i+0.5}]} {
    puts "I inside first loop: $i"
}

编辑:实际上,Donal的答案更好,因为它没有舍入错误:)

答案 1 :(得分:3)

Tcl的incr命令只处理整数值。获取循环值的步骤乘以某个小数值的推荐方法是使用整数循环计数器,然后从中计算小数值:

for {set i_int 0} {$i_int < 5} {incr i_int} {
    set i [expr {$i_int * 0.5}]
    puts "I inside first loop: $i"
} 

当分数步长不是2的幂的简单倍数时,这很重要;虽然0.5可以用二进制浮点运算完全表示(毕竟它是 -1 0.1可以&#t; t(就像 1 / 3 无法精确写入有限数量的小数位。)