Convert.ToDouble 对于不同的 CultureInfo 值
Convert.ToDouble for different CultureInfo values
我需要针对不同区域将值从字符串转换为双精度值。
让我们确定一件事:
- 美国文化使用具有
.
点 的字符串作为十进制值的指针
- 欧洲文化(例如 de-DE)使用具有
,
逗号 十进制值指针的字符串。
如果您尝试使用 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");
我需要针对不同区域将值从字符串转换为双精度值。
让我们确定一件事:
- 美国文化使用具有
.
点 的字符串作为十进制值的指针 - 欧洲文化(例如 de-DE)使用具有
,
逗号 十进制值指针的字符串。
如果您尝试使用 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");