你能比较存储为字符串的两个数字而不知道它们代表的数据类型吗?

时间:2013-01-22 21:52:47

标签: c# numbers string-comparison

如果我有两个数字表示为字符串,“100”和“200”,“100.1”和“200.1”,我如何比较它们以查看哪一个更大?

是否有一个通用的Number.Compare(stringA,stringB)来处理数据类型?我使用数据库条目来确定验证规则,但值可能是long,decimal,float等,所以我不能创建一个。

6 个答案:

答案 0 :(得分:6)

轻松使用linq

var numbers = new string[] {  "100" ,"200", "100.1" , "200.1" };
double max = numbers.Max(n => double.Parse(n));

另一种只有字符串操作的解决方案

int N = 100;
var max = numbers.Select(n => n.Split('.'))
                 .OrderByDescending(p => p[0].PadLeft(N,'0'))
                 .ThenByDescending(p => p.Length > 1 ? p[1].PadRight(N, '0') : "")
                 .Select(p => p.Length > 1 ? p[0] + "." + p[1] : p[0])
                 .First();

答案 1 :(得分:3)

如果您将类型声明为decimal,即使numbers do not have a decimal point就像有一个decimal point,这也可以正常工作

var strNumbers = new string[] 
{ 
   "100", 
   "200",
   "100.1", 
   "200.1" 
};
decimal maxVal = numbers.Max(m => decimal.Parse(m));

答案 2 :(得分:0)

  

是否存在通用的Number.Compare(stringA,stringB)   关心数据类型?

不,没有通用数字比较。你应该知道号码的类型。例如。你不能解析浮点数“100.1”为整数的字符串。我将解析你的字符串作为小数或双精度(将处理“100”和“100.1”),然后比较结果。使用Math.Max从两个数字中获得更大的数据:

var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));

答案 3 :(得分:0)

表示为字符串的任何数字都应该可以转换为double。

答案 4 :(得分:0)

你解析它们。既可以使用已经存在的解析器,也可以手动执行,后者可能会很糟糕,因为你要站起来并告诉我格式化可能正在变化,这可能是科学记法。

答案 5 :(得分:-3)

使用int.tryParse因为这样可以确保如果字符串不是数字就不会爆炸