使用基于当前区域性的点或逗号将字符串转换为十进制

时间:2014-01-17 12:23:55

标签: c# decimal culture

取决于浏览器语言,我收到了类似

的字符串
  

123.22

     

     

123,22

所以有时我在这里面临例外

Convert.ToDecimal(item.UnitPrice);

我想创建一些表达式,因此转换应该基于当前的文化来完成。有可能吗?

2 个答案:

答案 0 :(得分:1)

您没有告诉我们您的CultureInfo是什么,但无论如何......

我们假设您的NumberFormatInfo.NumberDecimalSeparator,而不是.

您的字符串123,22效果很好;

string s = "123,23";
decimal d = Convert.ToDecimal(s, CultureInfo.CurrentCulture); //123,23

如果您的字符串为123.22,那么您可以使用String.Replace方法替换,代替.;

string s = "123.23";
if(s.Contains('.'))
   s = s.Replace('.', ',');
decimal d = Convert.ToDecimal(s, CultureInfo.CurrentCulture); //123,23

答案 1 :(得分:0)

Convert.ToDecimal()已使用CultureInfo.CurrentCulture,但未将其设置为与浏览器相同的值。

您可以尝试在web.config文件中指定从浏览器继承当前文化:http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

通常更好的方向是确保浏览器提交一致的值,而不是取决于浏览器语言。

相关问题