用双引号将双引号解析为逗号

时间:2019-10-16 09:17:34

标签: c# parsing double comma cultureinfo

我正在和双打比赛。在荷兰,我们使用51.3代替51.3。我确实写了一段使用点而不是逗号的代码。但是,先前编写的代码的结果以英文形式返回带点的double形式。我遇到一些奇怪的错误。

这是我所拥有的:

var calResult = 15.2d;
var calResultString = calResult.ToString(CultureInfo.GetCultureInfo("nl-NL"));
var result = double.Parse(calResultString);
  1. calResult ==“ 15.2”->如预期
  2. calResultString ==“ 15,2”->符合预期
  3. result ==“ 152”->在这里,我需要一个逗号。

A确实也尝试在double.Parse中添加cultureinfo。结果是“ 15.2”。

TLDR:我需要将英语/美国双精度转换为荷兰(或类似规则)双精度。

提前谢谢! :)

PS

我希望这不是一个重复的问题,但是没有发现任何具体问题。

4 个答案:

答案 0 :(得分:3)

您每次从事荷兰文化工作时,都应该提供"nl-NL"

  var calResult = 15.2d;
  var calResultString = calResult.ToString(CultureInfo.GetCultureInfo("nl-NL"));
  // We should parse with "nl-NL", not with CurrentCulture which seems to be "en-US"
  var result = double.Parse(calResultString, CultureInfo.GetCultureInfo("nl-NL")); 

或指定CurrentCulture(默认区域性)

  CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("nl-NL");

  var calResult = 15.2d;
  // now CultureInfo.GetCultureInfo("nl-NL") is redundant 
  var calResultString = calResult.ToString(); 
  var result = double.Parse(calResultString); 

最后,如果您有一个string表示en-US文化中的某些浮点值,并且您希望相同的值但要string格式的nl-NL

  string source = "123.456";

  string result = double
    .Parse(source, CultureInfo.GetCultureInfo("en-US"))
    .ToString(CultureInfo.GetCultureInfo("nl-NL")); 

答案 1 :(得分:1)

数字和字符串不包含任何区域性信息,而是在数字和字符串之间进行转换时指定区域性。

  

result ==“ 152”->在这里我希望用逗号

发生的事情是您要求操作系统将“ 15,2”解析为双精度型,并且没有指定区域性。它默认为美国文化,并忽略了逗号。

如果您指定了文化:

var result = double.Parse(calResultString, CultureInfo.GetCultureInfo("nl-NL"));

它将为您提供正确的值(15.2),如果您的计算机配置为正确的数字格式(并且调试器使用了您的首选项),则该值甚至可能显示为15.2。

理想情况下,您无需对文化进行硬编码,而是使用用户选择的文化。

答案 2 :(得分:0)

我编写了一个简单的方法,该方法将检查输入中的昏迷字符并将其替换为点。我认为最好的方法是将输入作为string值。这样,您可以对其进行操作,然后可以对其进行解析,并根据需要返回双精度或字符串:

    var input = Console.ReadLine();
    double parsedDouble;
    if (input.Contains(","))
    {
        input = input.ToString().Replace(",", ".");
    }
    if (!Double.TryParse(input, out parsedDouble))
    {
        Console.WriteLine("Error parsing input");
    }
    else
    {
        Console.WriteLine(parsedDouble);
    }

    Console.ReadLine();

编辑:Robin Bennett / Dmitry Bychenko的答案比我的要好得多,因为我的只是手动的。我不知道他提供的parse过多。 我将离开我的解决方案,因为它确实解决了这个问题,即使它还...残酷;)

答案 3 :(得分:0)

 var calResult = 15.2d;
 var calResultString = calResult.ToString();

string result = double.Parse(calResultString).ToString(CultureInfo.GetCultureInfo("nl-NL"));