Convert.ToDouble 对于不同的 CultureInfo 值

Convert.ToDouble for different CultureInfo values

我需要针对不同区域将值从字符串转换为双精度值。

让我们确定一件事:

如果您尝试使用 Convert.ToDouble 函数指定的 CultureInfo 转换适当的字符串值,它将正常工作:

美式英语:

_value = Convert.ToDouble("1.5", CultureInfo.GetCultureInfo("en-US").NumberFormat);  //gets 1.5

对于德德:

_value = Convert.ToDouble("1,5", CultureInfo.GetCultureInfo("de-DE").NumberFormat); //gets 1,5

但是,如果我们需要将带有 . dot 的值转换为 European CultureInfo 或 , 的值,该怎么办?逗号 with US CultureInfo ?

我问这个是因为我总是使用 CultureInfo.CurrentCulture.NumberFormat 并且当语言改变时这会中断。使用 CultureInfo.CurrentCulture.NumberFormat 然后使用硬编码值更有意义,例如 CultureInfo.GetCultureInfo("en-US")CultureInfo.GetCultureInfo("de-DE").

这会中断并会报错:

美式英语:

_value = Convert.ToDouble("1,5", CultureInfo.GetCultureInfo("en-US").NumberFormat); //because there is comma sign in 1,5

对于德德:

_value = Convert.ToDouble("1.5", CultureInfo.GetCultureInfo("de-DE").NumberFormat); //because there is dot sign in 1.5

我试图通过首先将 Double 值从一种格式转换为另一种格式来解决这个问题,例如 Double temp = 1.5 到 1,5,然后将它们转换为字符串,但它不起作用

有一个解决方案,我可以使用 String.Replace("","") 函数将 . 替换为 ,,反之亦然,但这不是我的方法希望事情完成

在使用 CurrentCulture 之前,您需要将其设置为您了解的文化,例如 Thread.CurrentThread.CurrentCulture = 新 System.Globalization.CultureInfo("en-US");