【发布时间】:2016-10-05 23:48:56
【问题描述】:
我需要将不同区域的值从字符串转换为双精度值。
让我们确定一件事:
- 美国文化使用具有
.dot 的字符串作为十进制值的指针 - 欧洲文化(例如 de-DE)使用具有
,逗号指针的字符串表示十进制值。
如果您尝试使用Convert.ToDoublefunction 指定的CultureInfo 转换适当的字符串值,它将正常工作:
对于美国-en:
_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 的值与欧洲 CultureInfo 或 , comma 的值与美国 CultureInfo 进行转换,该怎么办? p>
我问这个是因为我总是使用CultureInfo.CurrentCulture.NumberFormat,当语言改变时,它会中断。使用CultureInfo.CurrentCulture.NumberFormat 然后使用硬编码值更有意义,例如
CultureInfo.GetCultureInfo("en-US") 或 CultureInfo.GetCultureInfo("de-DE")。
这样会中断,会报错:
对于美国-en:
_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("","") 函数将 . 替换为 ,,反之亦然,但这不是我想要的方式
【问题讨论】:
-
It makes more sense to use CultureInfo.CurrentCulture.NumberFormat then using hard coded values- 不是真的。您是说您想使用当前文化解析值。如果你知道价值来自什么文化,你应该把它传递进去。硬编码不会影响等式。您实际上是在说“解析此值,将句点视为小数点,但我会给您一个以逗号作为小数点的值”
标签: c# localization converter globalization