我有一个接受用户输入的文本框;我正在尝试使用此用户输入来填充我的一个业务对象的此成员:
公共 System.Decimal?汇率
该应用程序已本地化 - 我需要同时支持接受这些作为有效输入的文化:“1,5”和“1.5”
我现在的代码是:
varculture = Thread.CurrentThread.CurrentUICulture; 国际汇率; int.TryParse(txtExchangeRate.Text, NumberStyles.Number, 文化, 出汇率); entity.ExchangeRate = exchangeRate;
当用户文化设置为期望“1,5”格式(逗号作为小数分隔符)的文化时 - 例如“ro-RO”,我希望存储在 entity.ExchangeRate 中的值为 1.5;但是,当运行上面的代码时,它会被转换为 15。
关于如何转换这些各种格式以使存储在我的业务实体中的数据为“1.5”(点为小数分隔符)的任何建议?
谢谢。
你们是对的 - 使用 Thread.CurrentThread.CurrentCulture 而不是 Thread.CurrentThread.CurrentUICulture 和 decimal.TryParse 而不是 int.TryParse 是有意义的。
但是这些更改仍然不能解决我的问题。在玩了更多代码之后,我现在可以将问题简化为:
我正在使用 Telerik RadNumericTextBox 控件,它强制用户根据他们的文化使用正确的格式。因此,当 Thread.CurrentThread.CurrentCulture 设置为“ro-RO”时,它只接受“1,5”格式,而当它设置为“en-GB”时,它只接受“1.5”格式。
这是我现在使用的代码:
十进制汇率; decimal.TryParse(txtExchangeRate.Text, out exchangeRate); entity.ExchangeRate = exchangeRate;
案例 1:当前文化是 "en-GB" - 接受的输入是 "1.5" ,exchangeRate 设置为 1.5 - 一切正常。
案例 2:当前文化是 "ro-RO" - 接受的输入是 "1,5" ,但在执行 decimal.TryParse... 行后,exchangeRate 设置为 15 - 显然是错误的。我还应该提到,在这种情况下,txtExchangeRate.Text 的值在我的监视窗口中也显示为“1.5”。
所以,看起来像 decimal.TryParse 会考虑到当前的文化,但我找不到一种方法让它真正适合我。有什么建议么?