6

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

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

4

6 回答 6

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();
于 2013-01-22T21:56:31.573 回答
3

如果您声明类型,这也将起作用,decimal即使numbers do not have a decimal point就像一个人有一个decimal pointthis 也一样

var strNumbers = new string[] 
{ 
   "100", 
   "200",
   "100.1", 
   "200.1" 
};
decimal maxVal = numbers.Max(m => decimal.Parse(m));
于 2013-01-22T22:04:39.580 回答
2

是否有一个通用的 Number.Compare(stringA, stringB) 来处理数据类型?

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

var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));
于 2013-01-22T21:55:56.197 回答
0

你解析它们。使用已经存在的解析器,或者手动,后者可能会很棘手,因为你站起来告诉我格式可能是一切,这可能是科学记数法。

于 2013-01-22T21:57:33.143 回答
0

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

于 2013-01-22T21:57:30.287 回答
-2

使用int.tryParse因为这将确保如果字符串不是数字它不会爆炸

于 2013-01-22T21:56:22.903 回答