如何与“。”保持一致文化改变后的十进制 ToString

Posted

技术标签:

【中文标题】如何与“。”保持一致文化改变后的十进制 ToString【英文标题】:How to stay with "." at decimal ToString after culture changes 【发布时间】:2013-11-12 17:18:10 【问题描述】:

我有一个不同语言的网站。在模型内部,我有以下成员声明:

[Required(ErrorMessageResourceType = typeof(ViewRes.GlobalResource), ErrorMessageResourceName = "awr1")]
[Range(typeof(decimal), "0.00100001", "10000", ErrorMessageResourceType = typeof(ViewRes.GlobalResource), ErrorMessageResourceName = "TotalMoneyMinMaxValidation")]
public decimal TotalMoney  get; set; 

当我将 UI 文化更改为 ru-RU 时,我收到以下错误:

0.00100001 不是 Decimal 的有效值。

如何将我的文化信息和 UI 保留为 ru-RU,但所有小数都是句点 (.) 而不是逗号 (,)?

这是我尝试过的:

CultureInfo ci = new CultureInfo("ru-RU");
ci.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

不工作...

【问题讨论】:

【参考方案1】:

由于RangeAttribute 是使用运行时区域性转换的,因此没有针对此问题的精确解决方法。您需要接受使用双精度的损失:

[Range(0.01, 10000)]

或完全放弃使用RangeAttribute

见this link。

【讨论】:

以上是关于如何与“。”保持一致文化改变后的十进制 ToString的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如何实现主从复制?

python保持十进制与字符串完全一样

如何使图标与文本保持一致?

改变球员位置改变后的场景

正则匹配英文关键字高亮,高亮后的关键字和之前的大小写保持一致

正则匹配英文关键字高亮,高亮后的关键字和之前的大小写保持一致