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

时间:2015-09-16 13:09:12

标签: c# parsing decimal

我的代码:

        public decimal SetHourRate(string hourrate)
        {
            var value = decimal.Parse(hourrate, NumberStyles.Currency, CultureInfo.CurrentCulture.NumberFormat);            
            return value;
        }

参数:

string hourrate = "800.00"

我的问题: 现在我的输出就像var value = 80000?我希望它就像我输入的字符串。我来自瑞典,我们有一个点而不是逗号来分隔货币的小数。即使字符串看起来像string hourrate = "1050.67",它也必须工作。

如果输出类似于var value = "800,00"var value ="1050,67"(逗号而不是点),那就没问题了。

2 个答案:

答案 0 :(得分:1)

您必须使用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

答案 1 :(得分:0)

它返回80000,因为瑞典语中的.是GroupSeparator。 ,是小数点分隔符。

您传递的字符串为800.00,因此,.将用作组分隔符。这就是你获得这个价值的原因。

您可以强制小数点分隔符为. chaging the formater(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;
}