如果我有两个数字表示为字符串,“100”和“200”,“100.1”和“200.1”,我如何比较它们以查看哪一个更大?
是否有一个通用的Number.Compare(stringA,stringB)来处理数据类型?我使用数据库条目来确定验证规则,但值可能是long,decimal,float等,所以我不能创建一个。
答案 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因为这样可以确保如果字符串不是数字就不会爆炸