Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当数字是字符串时比较数字_C#_String_Comparison - Fatal编程技术网

C# 当数字是字符串时比较数字

C# 当数字是字符串时比较数字,c#,string,comparison,C#,String,Comparison,以下是一些简短的背景信息: 在设计一个规则引擎以将表单的各个方面与所需的输入进行比较时,我偶然发现了一个问题,即必须检查一个数字是否大于另一个数字,使用>和

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

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

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

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

所以我的下一个想法是,它将每个字符串的第一个字符对齐,并通过字符串的每个部分比较值。当我测试11111到9999时,我终于成功了,它认为9999更大。很好,我非常高兴它将1和9进行了比较,每次都有9赢,简单的修复,在较短的字符串前面加上0的前缀

将这一新理论在引擎中运行,它再次愉快地计算出哪个更大

然而,我仍然不相信,这种比较肯定还有其他陷阱,但我没有比较来验证我的理论。所以我想问你们的问题是,你们认为这会在什么情况下失败

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

我不相信这个方法是傻瓜式的(但是请注意,我没有测试100d到10000这样的字符串,因为有验证来确保这一点)

提前谢谢

注意:我做了一些谷歌搜索,我不认为这里有任何问题,是的,有些是相似的,但他们担心不希望字符串中有数字,不希望字符串中只有数字,所以我认为这是不同的,足以张贴


注2:我的具体问题是,当使用数字字符串而不是整数时,数字比较会在哪里失败?要比较字符串数字,最好先将它们转换为数字,例如使用
int.Parse
。更简单的是,让其他人了解将字符串解析为数字的所有文化敏感性复杂性,然后使用简单的数字比较


如果字符串不总是数字,请正确使用和处理。

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

你基本上是在问以下问题是否成立:

给定正整数n1和n2及其对应的词汇表示L(n1)和L(n2), n1 如果这个问题是肯定的,那么它是正确的,你可以从词典排序的定义中得到它

见: 定义III.5.2

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


让我担心的是可能存在不代表整数的非字符串。你能设法避免吗?否则,这是一种非常危险的方法,可能会产生非常意外的行为。

int
比较相比,它们会失败在哪里?嗯,如果编程正确的话,他们不会。我认为你已经过度合理化了,当你应该解析为int、double等并进行比较时。@RhysW-似乎你浪费了大量时间试图证明你已经知道的东西。为什么不把数字字符串转换成数字呢?如果你已经知道了正确的方法,我不明白这个问题的目的,似乎完全是浪费时间,因为归根结底,你不明白字符串是如何比较的。@ramhound我知道字符串是如何比较的,我理解并实现了正确的方法,为什么每个人都那么反对好奇心,因为如果我这样做会发生什么,这就是全部,好奇心进入奇怪和奇妙的世界,而不是毫无疑问地机械地跟随其他人做的事情……此外,没有理由因为某人不懂某件事而否决投票。Ofc我知道这一点:P但被测试的字段并不总是数字,有些时候它会是“男性”的,所以我不能使用int-parse,因为尝试将男性解析为int将是不明智的:PConsider
int.TryParse
。我已经编辑了我的答案。@RhysW:在男性和女性之间,谁更伟大?为什么?在编写引擎之前,请正确设计应用程序/数据。如果您需要解析和比较数字和枚举,则将其保存为字符串是不公平的…在正常情况下,这很好,但我使用工作流规则引擎,显然我可以编辑规则来实现这一点,而且效果很好,但我的好奇心超过了我,我对这种方式的其他陷阱感到好奇,因为我必须使用更少的逻辑来决定是否需要更好地转换它,如果将它们作为字符串进行比较是可行的,那么我对它很满意,谢谢你,是的,已经有了验证,只允许从这些地方进行数字,在这种情况下,我不能确定是否有正则表达式字符串在寻找模式,并剪掉一些无用的位以保持正确的状态