加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 尝试为当前语言设置小数分隔符,获取“Instance is read On

发布时间:2020-12-15 18:20:10 所属栏目:百科 来源:网络整理
导读:我的代码最初是为英语市场编写的,小数分隔符是“.”所以它期望数值作为字符串使用“.”作为分隔符.但是我们现在在其他地方有用户,例如,小数分隔符为“,”的欧洲地区. 因此,在我的软件(实际上只是当前线程)的上下文中,我想要将当前语言的小数分隔符覆盖为“.
我的代码最初是为英语市场编写的,小数分隔符是“.”所以它期望数值作为字符串使用“.”作为分隔符.但是我们现在在其他地方有用户,例如,小数分隔符为“,”的欧洲地区.

因此,在我的软件(实际上只是当前线程)的上下文中,我想要将当前语言的小数分隔符覆盖为“.”.即使它默认为其他东西.

我试过了

String sep = "."; 
  NumberFormatInfo nfi1 = NumberFormatInfo.CurrentInfo;
  nfi1.NumberDecimalSeparator = sep;

但是我在第三行得到了“Instance is read-only”异常.显然,NumberFormatInfo不可写.那么如何将当前语言的小数分隔符设置为默认值以外的其他值?

解决方法

您需要创建新文化,并且可以将当前文化用作模板,并仅更改分隔符.
然后,您必须将当前文化设置为新创建的文化,因为您无法直接更改当前文化中的属性.
string CultureName = Thread.CurrentThread.CurrentCulture.Name;
CultureInfo ci = new CultureInfo(CultureName);
if (ci.NumberFormat.NumberDecimalSeparator != ".")
{
    // Forcing use of decimal separator for numerical values
    ci.NumberFormat.NumberDecimalSeparator = ".";
    Thread.CurrentThread.CurrentCulture = ci;
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读