这个问题在这里已有答案:
有一个看起来像“1.900,00”的字符串。我怎么能把这个字符串格式化为1900的十进制数?
使用:
decimal.TryParse("1.900,00", out var vkp)
会给我一个错误的结果。我怎么处理这个?
这是在线C#编译器的URL:https://dotnetfiddle.net/B5EyyC
您可以尝试使用CultureInfo
,它使用'.'
作为千位分隔符,','
作为小数分隔符(例如"de-DE"
)。还有适当的NumberStyles
。
string input = "1.900,00";
decimal.TryParse(input,
NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint,
CultureInfo.GetCultureInfo("de-DE"), out var output);
你甚至可以创建你自己的NumberFormatInfo实例,你可以用任何你喜欢的方式指定NumberDecimalSeparator
和NumberGroupSeparator
。
试试这个:
string s = "1.900,00";
s = s.Substring(0, s.LastIndexOf(",")).Replace(".", "") + "." + s.Substring(s.LastIndexOf(",") + 1);
decimal vkp = 0;
decimal.TryParse(s, out vkp);
我想你可以尝试以下方法:
string number = "1.900,00";
decimal.TryParse(number.Split(",")[0].Replace(".",""), out var vkp);
如果您需要更简单的检查,您可以尝试创建一个函数来检查字符串是否包含','字符。
public static bool ToDouble(string s, out double d)
{
if (s.Contains(","))
return double.TryParse(s.Split(",")[0].Replace(".", ""), out d);
return double.TryParse(s, out d);
}
您还可以通过以下方式获取本地化设置的小数分隔符:
string dsep = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator
//using System.Globalization;
NumberStyles style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
CultureInfo culture = CultureInfo.CreateSpecificCulture("es-ES");
Decimal vkp;
Decimal.TryParse("1.900,00", style, culture, out vkp);