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

Bob*_*ob. 5 c# numbers string-comparison

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

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

I4V*_*I4V 6

简单的linq

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

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

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();
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 2

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

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

var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));
Run Code Online (Sandbox Code Playgroud)