簡體   English   中英

用點解析雙精度為逗號

[英]Parsing double with dot to comma

我正在與雙打合作。 在荷蘭,我們使用 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:我需要將英語/美式雙人轉換為荷蘭語(或類似規則)的雙人。

提前致謝: :)

附言

我希望這不是一個重復的問題,但沒有發現任何具體的問題。

每當您使用荷蘭文化時,您可能應該提供"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); 

最后,如果您有一個代表en-US文化中的某個浮點值string ,並且您想要相同的值但是是nl-NL格式的string

  string source = "123.456";

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

數字和字符串不包含任何文化信息,而是在數字和字符串之間轉換時指定文化。

結果 == "152" -> 這里我希望有一個逗號

發生的事情是您要求操作系統將“15,2”解析為雙精度數,並且沒有指定文化。 它默認為美國文化並忽略逗號。

如果您指定了一種文化:

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

它會為您提供正確的值 (15.2),如果您的計算機配置為正確的數字格式(並且調試器使用您的偏好),它甚至可能顯示為 15,2。

理想情況下,您不會對文化進行硬編碼,而是使用用戶選擇的文化。

我編寫了一個簡單的方法,可以檢查輸入中的逗號字符並將其替換為點。 我相信最好的方法是將輸入作為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過載。 我會留下我的解決方案,因為它確實解決了這個問題,即使它有點……粗魯;)

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM