以下是一些简要的背景信息:
在设计规则引擎以将表单的各个方面与所需输入进行比较时,我偶然发现了必须检查数字是否大于另一个数字的问题,使用>非常容易。和<运营商对吗?错了,我必须比较的这两个类型是字符串,它们必须是字符串,它不是可以改变的东西。
所以希望看到引擎会失败的地方,所以我知道从哪里开始我告诉它要比较" 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:我的具体问题是,当使用数字字符串而不是整数时数字比较会失败
答案 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。 但是,你没有提到所有的整数都是正整数,但正负相反的正整数是正确的。 让我担心的是存在不代表整数的非字符串的可能性。你能以某种方式避免它吗?如果没有,这是非常危险的方式,可以产生非常意外的行为。