转换字符串为十进制,但有瑞典货币
本文关键字:货币 字符串 十进制 转换 | 更新日期: 2023-09-27 18:12:55
我的代码:
public decimal SetHourRate(string hourrate)
{
var value = decimal.Parse(hourrate, NumberStyles.Currency, CultureInfo.CurrentCulture.NumberFormat);
return value;
}
In parameter:
string hourrate = "800.00"
我的问题:现在我的输出是var value = 80000
?我想让它和我放进去的字符串一样。我来自瑞典,我们的货币用点代替逗号来分隔小数。即使字符串看起来像string hourrate = "1050.67"
,它也一定能工作。
如果输出像var value = "800,00"
或var value ="1050,67"
(逗号代替点)
返回80000
,因为瑞典语中的.
是GroupSeparator。,
为小数分隔符。
你正在传递一个像800.00
这样的字符串,.
将被用作组分隔符。这就是为什么你得到这个值。
您可以通过更改a格式器(CultureInfo)强制将小数分隔符设置为.
,例如:
public decimal SetHourRate(string hourrate)
{
var swedishCulture = new CultureInfo("sv-SE");
swedishCulture.NumberFormat.NumberDecimalSeparator = ".";
var value = decimal.Parse(hourrate, NumberStyles.Currency, swedishCulture);
return value;
}
您必须使用CultureInfo来指定解析时使用的格式。
CultureInfo culture = new CultureInfo("sv-SE");
culture.NumberFormat.NumberDecimalSeparator = ".";
decimal value;
if (decimal.TryParse(hourrate, NumberStyles.Currency, culture, out value))
{
// Do what you want with value if successfully parsed
}
else
{
// Failed to parse
}
确保在代码的顶部包含System.Globalization