将丹麦语double转换为带有多个“。”的字符串分隔符[千]

时间:2018-09-11 08:42:47

标签: c#

我正在尝试将string格式的数字转换为double。它可以是 English 文化或丹麦文化。这是我正在尝试的代码

public static double ToDoubleOrDefault(this string value)
{
    var doubleValue = default(double);

    var danishCultureInfo = new CultureInfo("da-DK");
    var englishCultureInfo = new CultureInfo("en-US");

    if (double.TryParse(value, 
                        NumberStyles.AllowDecimalPoint, 
                        englishCultureInfo, 
                        out doubleValue))
    {
        return doubleValue;
    }
    else if (double.TryParse(value, 
                             NumberStyles.AllowDecimalPoint,
                             danishCultureInfo, 
                             out doubleValue))
    {
        return doubleValue;
    }
    return doubleValue;
}

如果直到丹麦语编号具有个以上 "." 分隔符,效果很好。

例如:“ 1.908.746”

有没有办法做到?

2 个答案:

答案 0 :(得分:1)

我建议添加NumberStyles.AllowThousands

public static double ToDoubleOrDefault(this string value) {
  var doubleValue = default(double);

  // We don't have to create new instances (new CultureInfo()...)
  var danishCultureInfo = CultureInfo.GetCultureInfo("da-DK");
  var englishCultureInfo = CultureInfo.GetCultureInfo("en-US");

  if (double.TryParse(value, 
                      NumberStyles.AllowDecimalPoint, 
                      englishCultureInfo, 
                      out doubleValue)) 
    return doubleValue;
  else if (double.TryParse(value, 
                           NumberStyles.AllowDecimalPoint, 
                           danishCultureInfo, 
                           out doubleValue)) 
    return doubleValue;
  else if (double.TryParse(value, 
                           NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, 
                           englishCultureInfo, 
                           out doubleValue)) 
    return doubleValue;
  else if (double.TryParse(value, 
                           NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, 
                           danishCultureInfo, 
                           out doubleValue)) 
    return doubleValue;

  return doubleValue;
}

因此,我们尝试将给定的string视为

  1. 没有千位分隔符的英语浮点,例如123456789.1
  2. 没有千位分隔符的丹麦浮点,例如123456789,1
  3. 带有千位分隔符的英语浮点,例如123,456,789.1
  4. 带有千位分隔符的丹麦浮点,例如123.456.789,1

请注意,这里有一个歧义123.456123.456(英语,因为.十进制分隔符)和123456(丹麦语,因为.分隔符)

答案 1 :(得分:0)

这样您就可以了:

string strNumber = "1.908.746";
double number = double.Parse(strNumber.Replace(".", ""));