以下是一些简短的背景信息:
在设计规则引擎以将表单的各个方面与所需的输入进行比较时,我偶然发现了必须检查一个数字是否大于另一个数字的问题,使用 > 和 < 运算符很容易,对吧?错了,我必须比较的这两个类型是字符串,它们必须是字符串,它不是可以改变的。
所以希望看看引擎会在哪里发生故障,所以我知道从哪里开始,我告诉它比较“100”和“10,000”,当它正确计算出 10k 更大时,你可以想象我的惊讶,然后我意识到 DUH 它只是比较字符串长度,所以我比较了 1001 和 1000,再次正确,1001 更大。
但我坚持认为这不应该起作用,所以我一直在用各种各样的场景来打击引擎,决心看着它失败。在一位同事指出该系统能够比较 1001 和 1000 作为文件名并正确排序后,最新的想法是它比较了某种 aschii 字符值,测试继续。这将失败,我不能接受它能够正确计算当两者都是字符串时哪个数值更大。
所以我的下一个想法是它正在排列每个字符的第一个字符并通过字符串的每个部分比较值。当我测试 11,111 到 9,999 并认为 9,999 更大时,我终于成功了。完美,我很高兴将 1 与 9 进行比较,每次 9 都赢了,简单的修复,在较短的字符串前面加上 0。
通过引擎运行这个新理论,它又一次愉快地计算出哪个更大。
但是我仍然不相信,这种比较肯定还有其他陷阱,但是我没有比较来测试来证明我的理论。所以我向你提出的问题是,你认为这可能会在什么情况下失败?
你自己以前试过这个吗?当它们是字符串时比较数字,你面临的陷阱是什么?我是否已经将它们全部覆盖了,还是我忽略了一些主要的陷阱?
我不相信这种方法是万无一失的(但是请注意,我没有测试诸如 100d 到 10000 之类的字符串,因为有验证可以确定这一点)
提前致谢!
注意:我确实做了一些谷歌搜索和搜索,我认为这里没有任何问题,是的,有些是相似的,但他们担心字符串中不想要数字,不想要只有数字的字符串,所以我认为这不同足以发帖。
注2:我的具体问题是使用数字字符串而不是整数时,数字比较会在哪里失败