将带点号和逗号的数字转换为双精度将失败

时间:2019-03-14 15:05:40

标签: c# parsing decimal

具有看起来像“ 1.900,00”的字符串。如何将字符串格式化为十进制1900?

使用:

decimal.TryParse("1.900,00", out var vkp)

会给我一个错误的结果。我该如何处理?

以下是在线C#编译器的URL:https://dotnetfiddle.net/B5EyyC

4 个答案:

答案 0 :(得分:4)

您可以尝试使用将CultureInfo用作千位分隔符并将'.'用作十进制分隔符的','(例如"de-DE")。还有合适的NumberStyles

string input = "1.900,00";
decimal.TryParse(input, 
    NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint, 
    CultureInfo.GetCultureInfo("de-DE"), out var output);

您甚至可以创建自己的NumberFormatInfo实例,您可以在其中任意选择指定NumberDecimalSeparatorNumberGroupSeparator

答案 1 :(得分:0)

尝试一下:

        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);

答案 2 :(得分:0)

我想您可以尝试以下操作:

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

答案 3 :(得分:0)

Decimal.TryParse doc

//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);