如果我有两个数字表示为字符串,“100”和“200”、“100.1”和“200.1”,我如何比较它们以查看哪个更大?
是否有一个通用的 Number.Compare(stringA, stringB) 来处理数据类型?我正在使用数据库条目来确定验证规则,但这些值可能是 long、decimal、float 等,所以我无法创建一个。
如果我有两个数字表示为字符串,“100”和“200”、“100.1”和“200.1”,我如何比较它们以查看哪个更大?
是否有一个通用的 Number.Compare(stringA, stringB) 来处理数据类型?我正在使用数据库条目来确定验证规则,但这些值可能是 long、decimal、float 等,所以我无法创建一个。
轻松使用 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();
如果您声明类型,这也将起作用,decimal
即使numbers do not have a decimal point
就像一个人有一个decimal point
this 也一样
var strNumbers = new string[]
{
"100",
"200",
"100.1",
"200.1"
};
decimal maxVal = numbers.Max(m => decimal.Parse(m));
是否有一个通用的 Number.Compare(stringA, stringB) 来处理数据类型?
不,没有通用数字比较。你应该知道号码的类型。例如,您不能将浮点数“100.1”的字符串解析为整数。我会将您的字符串解析为小数或双精度数(将同时处理“100”和“100.1”),然后比较结果。使用Math.Max从两个数字中获取更大的值:
var max = Math.Max(Double.Parse("100.1"), Double.Parse("200"));
你解析它们。使用已经存在的解析器,或者手动,后者可能会很棘手,因为你站起来告诉我格式可能是一切,这可能是科学记数法。
任何表示为字符串的数字都应该可以转换为双精度数。
使用int.tryParse因为这将确保如果字符串不是数字它不会爆炸