TCL整数比较

时间:2016-05-15 06:18:17

标签: tcl

我想知道如何确认tcl中的两个整数是否彼此接近? 换句话说,如果两个数字之间的值差异小于或等于5,则结果通过其他FAIL。

有人可以告诉我如何在tcl中编写它吗?或者建议我使用哪个操作员来实现这一点。

谢谢, Kallesh

2 个答案:

答案 0 :(得分:0)

两个数字ab之间的差异等于$a - $b。这种差异可以是负数也可以是正数(如果它们相等则为零),但为了使比较更容易,您需要差值的绝对值(幅度),即忽略符号的值。你可以通过abs($a - $b)得到它。剩下要做的唯一事情就是将它与5进行比较:abs($a - $b) <= 5

expr命令可以将此表达式作为参数并计算真值:如果比较计算为真,则expr {abs($a - $b) <= 5}将返回1,否则返回0。

if命令可以使用此表达式并将其用于算法流控制,即决定调用哪些命令以及哪些命令被跳过:

if {abs($a - $b) <= 5} {
    # invoked if true
} else {
    # invoked if false
}

回复:唐纳德的评论;在我原来的回答中,我犯了一个基本的错误,即在条件内expr调用if语句。没有必要这样做,因为if的第一个参数无论如何都被expr命令隐式评估。以这种方式调用expr不会造成任何伤害,但如果有人看到它会导致一些窃笑。

文档:absexprif

答案 1 :(得分:0)

abs函数计算一个数字的大小,即,如果它是负数,则否定它。你需要做的就是查看两个整数之间差异的大小,看看它是否在你关心的阈值之内。

if {abs($a - $b) <= 5} {
    # Values are indeed "close enough"
}

这是一种标准技术;比较浮点数时它是非常常见(尽管通常使用较小的“足够接近”值;在该域中,它通常称为ε或epsilon)。