转换.不同CultureInfo值的ToDouble

本文关键字:ToDouble 值的 CultureInfo 不同 转换 | 更新日期: 2023-09-27 18:11:58

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

让我们确定一件事:

  • 美国文化使用具有. 作为十进制值指针的字符串
  • 欧洲文化(例如de-DE)使用具有, 逗号指针的字符串表示十进制值。

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

US-en

:

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

:

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

但是,如果我们需要用. 与欧洲文化信息转换值,或者用, 逗号与美国文化信息转换值,该怎么办?

我问这个,因为我总是使用CultureInfo.CurrentCulture.NumberFormat,当语言改变时,这将打破。使用CultureInfo.CurrentCulture.NumberFormat比使用硬编码值更有意义,例如CultureInfo.GetCultureInfo("en-US")CultureInfo.GetCultureInfo("de-DE") .

这将中断并报告一个错误:

US-en

:

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

:

_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(",")函数替换.,,反之亦然,但这不是我想做的事情的方式

转换.不同CultureInfo值的ToDouble

在使用CurrentCulture之前,您需要将其设置为您所知道的文化类型Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");