2

以下是一些简短的背景信息:

在设计规则引擎以将表单的各个方面与所需的输入进行比较时,我偶然发现了必须检查一个数字是否大于另一个数字的问题,使用 > 和 < 运算符很容易,对吧?错了,我必须比较的这两个类型是字符串,它们必须是字符串,它不是可以改变的。

所以希望看看引擎会在哪里发生故障,所以我知道从哪里开始,我告诉它比较“100”和“10,000”,当它正确计算出 10k 更大时,你可以想象我的惊讶,然后我意识到 DUH 它只是比较字符串长度,所以我比较了 1001 和 1000,再次正确,1001 更大。

但我坚持认为这不应该起作用,所以我一直在用各种各样的场景来打击引擎,决心看着它失败。在一位同事指出该系统能够比较 1001 和 1000 作为文件名并正确排序后,最新的想法是它比较了某种 aschii 字符值,测试继续。这将失败,我不能接受它能够正确计算当两者都是字符串时哪个数值更大。

所以我的下一个想法是它正在排列每个字符的第一个字符并通过字符串的每个部分比较值。当我测试 11,111 到 9,999 并认为 9,999 更大时,我终于成功了。完美,我很高兴将 1 与 9 进行比较,每次 9 都赢了,简单的修复,在较短的字符串前面加上 0。

通过引擎运行这个新理论,它又一次愉快地计算出哪个更大。

但是我仍然不相信,这种比较肯定还有其他陷阱,但是我没有比较来测试来证明我的理论。所以我向你提出的问题是,你认为这可能会在什么情况下失败?

你自己以前试过这个吗?当它们是字符串时比较数字,你面临的陷阱是什么?我是否已经将它们全部覆盖了,还是我忽略了一些主要的陷阱?

我不相信这种方法是万无一失的(但是请注意,我没有测试诸如 100d 到 10000 之类的字符串,因为有验证可以确定这一点)

提前致谢!

注意:我确实做了一些谷歌搜索和搜索,我认为这里没有任何问题,是的,有些是相似的,但他们担心字符串中不想要数字,不想要只有数字的字符串,所以我认为这不同足以发帖。

注2:我的具体问题是使用数字字符串而不是整数时,数字比较会在哪里失败

4

2 回答 2

4

要比较字符串中的数字,最好先将它们转换为数字,例如使用int.Parse. 让其他人弄清楚将字符串解析为数字的所有文化敏感的复杂性,然后只使用简单的数字比较,这更加万无一失,更不用说更容易了。

如果字符串并不总是数字,请int.TryParse适当使用和处理。

于 2012-07-20T13:35:30.040 回答
3

让我看看我是否理解你的问题:

您基本上是在询问以下是否成立:

给定正整数 n1 和 n2 及其对应的词法表示 L(n1) 和 L(n2),n1 < n2 当且仅当 L(n1) < L(n2)?

如果这是问题,那么它是正确的,您可以从词典排序的定义中得出它。

请参阅:http : //www.dartmouth.edu/~matc/DiscreteMath/III.5.pdf 定义定义 III.5.2。

但是,您没有提到所有整数都是正数,但负整数正好相反。

让我担心的是存在不代表整数的非字符串的可能性。你能以某种方式避免它吗?如果不是,这是非常危险的做法,并且会产生非常意想不到的行为。

于 2012-07-20T14:48:08.223 回答