将本地化字符串转换为小数

时间:2010-08-17 11:19:48

标签: c# asp.net

我有一个字符串,可能看起来像“123,34”,“123123,09”,“1234”,“123.34”,“123123.09”

(将存储到MySql DB中的10,2十进制的字符串表示)

由于ASP.net线程的文化可能不同,因为我的应用程序支持本地化,我需要找到一种安全的方法将最可能的用户输入转换为小数。

这怎么可能?

我尝试了各种Decimal.Parse尝试,到目前为止都失败了。

解决方案
我的最终解决方案是混合的。我使用字符串替换来确保我的日期格式化为我用于解析的指定CultureInfo

5 个答案:

答案 0 :(得分:2)

您应该阅读当前的文化信息 而且你可以

//CultureInfo culture = new CultureInfo("en-US"); 

Convert.ToDecimal(value, System.Globalization.CultureInfo.CurrentCulture)

答案 1 :(得分:2)

一旦将小数转换为字符串,实际上没有简单的方法来告诉使用哪种文化格式来格式化它。 您有两种选择:

  1. 记录所使用的格式化文化并将其与字符串一起传回,然后将其用于相应的decimal.Parse(string, IFormatProvider)

  2. 在UI级别(文化已知的位置)执行解析,并将值作为十进制类型传回。

答案 2 :(得分:1)

Decimal.Parse是要走的路,但你需要包含本地化的特定重载Decimal.Parse Method (String, IFormatProvider)

答案 3 :(得分:1)

Decimal.Parse (String, IFormatProvider) 

其中IFormatProvider是字符串的特定于文化的格式

答案 4 :(得分:-2)

使用InvariantCulture转换字符串

Decimal.parse(yourstring,System.Globalization.CultureInfo.InvariantCulture);

如果您的字符串与系统的cultureinfo不兼容,您可能会得到一些奇怪的结果。