首页 > 解决方案 > 用点解析双精度为逗号

问题描述

我正在与双打合作。在荷兰,我们使用 51,3 而不是 51.3。我确实写了一段使用点而不是逗号的代码。但是之前编写的代码的结果返回了一个双倍的英文方式,带有一个点。我遇到了一些奇怪的错误。

这是我所拥有的:

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. 结果 == "152" -> 在这里我期待一个逗号。

A 也确实尝试在 double.Parse 中添加文化信息。这导致了“15.2”。

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

提前致谢!:)

附言

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

标签: c#parsingdoublecommacultureinfo

解决方案


您可能应该在"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); 

最后,如果您有 astring代表文化中的某个浮点值en-US并且您想要相同的值格式为 a :stringnl-NL

  string source = "123.456";

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

推荐阅读