将danish double转换为带有多个“。”分隔符的字符串[Thousand]

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

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

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”

有没有办法可以做到?

c#
2个回答
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(丹麦语,因为.是千分隔符)


0
投票

这样你就可以了:

string strNumber = "1.908.746";
double number = double.Parse(strNumber.Replace(".", ""));
© www.soinside.com 2019 - 2024. All rights reserved.