【问题标题】:Convert.ToDouble for different CultureInfo valuesConvert.ToDouble 用于不同的 CultureInfo 值
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 是的,我知道这一点,但由于我在数据表中显示数据,我必须再次用String.Replace 替换字符串,因为转换后的数据将采用不同的格式。使用CultureInfo("en-US") 转换的值将包含.-dots,使用 CultureInfo("de-DE") 转换的值将包含,-逗号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多