转换字符串为十进制,但有瑞典货币

本文关键字:货币 字符串 十进制 转换 | 更新日期: 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