Tcl中的数值比较

时间:2019-05-13 10:40:42

标签: 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中编写吗?或协助我与操作员一起使用以实现此目标...

谢谢 玛蒂

2 个答案:

答案 0 :(得分:1)

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

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

参考:https://www.tcl.tk/man/tcl8.6/TclCmd/string.htm#M10

答案 1 :(得分:1)

您必须考虑想要哪种验证。例如,如果您只想验证值是整数, any 整数,请执行以下操作:

if {![string is entier -strict $value]} {
    error "$value is not an integer"
}

(也有string is integer,但是出于历史原因使用受限的32位范围,而string is wide使用64位范围。对于浮点数,请使用string is double-strict是必需的;没有它,空字符串也将被接受;同样,这是出于历史原因。)

当您要在特定范围内输入数值时,可以使用复合条件:

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

如果您经常这样做,请使用以下步骤使其更清晰:

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)"
}