解决.NET 带小数的数字字符串转换decimal失败报错

今天一位同事发现一个奇怪的现象,一个文本.

今天一位同事发现一个奇怪的现象,一个文本框,用户输入数字,提交后报错,大概内容是说格式不正确,转换失败,错误那一行的代码是:

decimal dPrice = Convert.ToDecimal(strPrice);

这行代码没什么特别的,只要变量的值是合法的数字应该是没问题的。建了一个测试页面,直接把取到的值打印出来,结果字符串打印出来的结果也是对的。

这就纳闷了,字符串的值和格式都是合法的,怎么转换的时候就报错了呢。另一个更纳闷的是程序在本地调试是没问题的,放到服务器上就变成这样了。。。

我想问题应该是出在服务器的配置上了,看了一下IIS上的站点属性,再点ASP.NET标签再看看配置文件的各个属性了,突然af-ZA惊现在我眼前,是Culture和UI Culture的值都是设置为af-ZA了。我想问题应该就出在这里了,我把这两个值设为zh-CN,再去看看刚才报错的页面,恢复正常了。呵呵

这里顺便解释一下Culture是个什么东东。

Culture表示当前区域性信息。 此信息确定了日期、时间、货币和数字的默认格式,文本的排序顺序,字符串比较方式以及大小写。 通过此属性进行的设置不是语言设置。 此属性仅定义与地理区域的标准设置相关的数据。

要查看每个国家的日期、时间、货币和数字的默认格式可以在控制面板中的“地区和语言”里看到。