当这些数字是字符串时比较数字

时间:2012-07-20 13:32:37

标签: c# string comparison

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

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

所以希望看到引擎会失败的地方,所以我知道从哪里开始我告诉它要比较" 100"对于" 10,000",当你正确地计算出10k更大时,你可以想象我的惊喜,然后我意识到DUH它只是比较字符串长度,所以我比较1001到1000,再次得到它正确,1001是大。

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

所以我的下一个想法是,它排列了每个字符的第一个字符,并通过字符串的每个部分比较值。当我测试11,111到9,999时,我终于成功了,它认为9,999更大。完美,我非常高兴它比较1到9,每次9韩元,简单修复,用0' s作为短字符串的前缀。

通过引擎运行这个新理论,并再次愉快地计算哪个更大。

然而,我仍然不相信,这种类型的比较必然存在其他陷阱,但我没有进行比较以测试以证明我的理论。所以我对你过度开花的问题是你认为这可能导致失败的情况?

你以前试过这个吗?当它们是字符串时比较数字以及你遇到的陷阱是什么?我把它们全部覆盖了还是我忽略了一些重大陷阱?

我不相信这种方法很简单(但请注意,我没有测试100d到10000之类的字符串,因为有确认可以确定)

提前致谢!

注意:我确实做了一些谷歌搜索和搜索,我不认为它被这里的任何问题所涵盖,是的一些是相似的,但他们担心不想在字符串中的数字,不想只有一串数字,所以我认为这种差异足以发布。

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

您基本上是在询问是否符合以下条件:

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

如果问题是肯定的,那么它是正确的,您可以从字典排序的定义中推导出来。

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

但是,你没有提到所有的整数都是正整数,但正负相反的正整数是正确的。

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

相关问题