将带有点和逗号的数字转换为double将失败[复制]

问题描述 投票:1回答:4

有一个看起来像“1.900,00”的字符串。我怎么能把这个字符串格式化为1900的十进制数?

使用:

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

会给我一个错误的结果。我怎么处理这个?

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

c# parsing decimal
4个回答
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


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

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

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);
© www.soinside.com 2019 - 2024. All rights reserved.