C# 将字符串转换为十进制,但使用瑞典货币

C# 将字符串转换为十进制,但使用瑞典货币,c#,parsing,decimal,C#,Parsing,Decimal,我的代码: public decimal SetHourRate(string hourrate) { var value = decimal.Parse(hourrate, NumberStyles.Currency, CultureInfo.CurrentCulture.NumberFormat); return value; } 在参数中: string hourrat

我的代码:

        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”
(逗号而不是点),则可以。

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

它返回
80000
,因为瑞典语中的
是组分隔符。
是十进制分隔符

您传递的字符串类似于
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;
}