所以我有这个输入:3,000,000
而这个函数返回30000M
:
public static decimal? CustomParse(string incomingValue)
{
decimal val;
if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
return null;
return val / 100;
}
将这种输入转换为numbber
的最佳方法是什么?
编辑
我也尝试这个::
Regex regex = new Regex(@"\d+");
输出是3
你也可以这样做
return Decimal.Parse(incomingValue, new CultureInfo("en-US"));
在en-US'。'是逗号分隔符。所以它会正确解析文本。
如果文化被设置为说“de-DE”3将是转换的预期结果为','是逗号分隔符。
然而,你的正则表达式总会给你3,因为它只匹配[0-9]+
正则表达式,不关心你的文化设置。如果你想要一个正则表达式匹配你的号码,你必须使用类似的东西
Regex regex = new Regex(@"\d+(,\d+)*");
这将匹配“123”以及“123,123”但不匹配“123”或“123”。 (在女巫的情况下,它将匹配123部分)。
在IFormatProvider
中使用decimal.Parse
var format = new NumberFormatInfo
{
NumberGroupSeparator = ","
};
decimal res = decimal.Parse("3,000,000", format);
你除以100,所以你的数字不会是3百万......这里的解决方案:
class Program
{
static void Main(string[] args)
{
decimal? value = CustomParse("3,000,000");
Console.WriteLine(value);
}
public static decimal? CustomParse(string incomingValue)
{
decimal val;
if (!decimal.TryParse(incomingValue.Replace(",", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
return null;
return val;
}
}