[英]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);
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.