Tcl中的数值比较

Tcl中的数值比较,tcl,Tcl,我想知道如何在TCL中获取数值。我的意思是,如果值不是数字,结果应该失败,否则通过 下面是我尝试过的 set trueKIND false set trueKINDlist [list 1 2 3 4 5 6 7 8 9 10] if {[lsearch -exact $trueKINDlist $Registrant(KIND)] >= 0} { set trueKIND true } 但是如果trueKINDlist的值大于10,那么该代码肯定会失败 谁能告诉我怎么用TCL

我想知道如何在TCL中获取数值。我的意思是,如果值不是数字,结果应该失败,否则通过

下面是我尝试过的

set trueKIND false
set trueKINDlist [list 1 2 3 4 5 6 7 8 9 10]

if {[lsearch -exact $trueKINDlist $Registrant(KIND)] >= 0} {
    set trueKIND true
}
但是如果trueKINDlist的值大于10,那么该代码肯定会失败

谁能告诉我怎么用TCL写这个?或协助我与运营商使用,以实现这一点

谢谢
Mattie

您可以通过
[string is…]
过程验证字符串。例如:

set trueKIND [string is integer -strict $Registrant(KIND)]

参考资料:

你必须考虑你想要什么样的验证。例如,如果只想验证该值是否为整数,请执行以下操作:

if {![string is entier -strict $value]} {
    error "$value is not an integer"
}
(还有
字符串是整数
,但由于历史原因,它使用受限的32位范围,
字符串是宽的
使用64位范围。对于浮点数,使用
字符串是双精度的
。这里需要
-strict
;没有它,也可以接受空字符串;同样,这是出于历史原因。)儿子们。)

当您希望该值处于特定范围时,可以使用复合条件:

if {![string is entier -strict $value] || !($value >= 0 && $value <= 10)} {
    error "$value is not an integer in the range (0..10)"
}

如果{![字符串是完整的-严格的$value]| |!($value>=0&&$value=$lowerBound&&$value我不太明白你的意思。如果
trueKINDlist
的一个元素是
10
,看起来代码不会失败。如果trueKINDlist的元素是11,代码会失败,因为11不在列表中。因此我希望代码能够读取所有数值。例如如果元素不是数字,那么它应该失败如果11不在列表中,那么您将从
lsearch
中得到-1,并且
trueKIND
仍然为false。这不是您要寻找的吗?好的,我想我已经开始理解了。如果您想使
trueKIND
成为
true
的任何数值
registernt(KIND)
,然后您可以使用然后再使用最适合您的类。现在,似乎您可以使用digit、double或integer,这取决于您认为是数字的数字类型。此外,您还可以执行其他验证,例如:
如果{[string is integer-strict$variable]&&&$variable>1&&$variable谢谢Chpock,这并不适用于所有数值。如果trueKIND的元素大于10或任何其他数值,该怎么办?我试图实现的是,如果trueKIND的元素不是数值,它应该失败
proc IntegerInRange {value lowerBound upperBound} {
    expr {[string is entier -strict $value] && $value >= $lowerBound && $value <= $upperBound}
}

if {![IntegerInRange $value 0 10]} {
    error "$value is not an integer in the range (0..10)"
}
if {![IntegerInRange $value2 3 25]} {
    error "$value2 is not an integer in the range (3..25)"
}