我正在做一个在文本框中使用小数的项目。我目前正在一台将小数分隔符设置为","而不是"."的机器中进行开发,因此在将文本字符串解析为十进制时,我不得不使用此句子:
decimal number = Decimal.Parse(number.Text, CultureInfo.InvariantCulture);
现在。。。CultureInfo.InvariantCulture 是正确的做法,还是我应该使用 CurrentCulture ?
谢谢
马蒂亚斯。
对于用户输入,您通常需要CultureInfo.CurrentCulture
.您正在使用对您来说不自然的区域设置这一事实不是通常的用户情况 - 如果用户在整个系统中将,
作为小数点,他们可能习惯于使用它,而不是您喜欢的.
。换句话说,当您在具有此类区域设置的系统上进行测试时,请学习使用,
而不是.
- 这是使区域设置测试有用的部分:)
另一方面,例如,如果您要将值存储在配置文件或类似的东西中,那么您真的想使用 CultureInfo.InvariantCulture
.
思路相当简单 - 是用户的数据(=> CurrentCulture
),还是应该是全局的(=> InvariantCulture
)?
如果你做了一个正确的国际化程序...
A) 如果您使用的是 Winforms 或 WPF,或者通常用户将在程序的机器上"工作",则应使用CurrentCulture
B) 如果您是 Web 编程,那么用户应该能够选择其区域性,并且 CurrentCulture
(Web 服务器的区域性)应仅用作默认值
然后
A)您"内部"保存的数据(以便写入然后由程序读取)应使用InvariantCulture
,
B)您与其他应用程序交换的数据最好用InvariantCulture
编写(除非其他应用程序写得不好并且需要特定的格式),
C) 导出给用户的文件应遵循前面的规则(关于用户界面的规则),除非您使用的是"标准定义的格式",如 XML(然后使用 Xml 格式化程序)