区域性问题导致多语言软件运行出错

来源:互联网 发布:淘宝店铺规划 编辑:程序博客网 时间:2024/04/30 11:11

在做多语言软件时,因为客户是俄罗斯的,碰到一个怪问题

float aa = float.Parse(this.textBox1.Text.Trim());

this.textBox1.Text.Trim()中的值为正常的浮点数时,如“3.3”时,转换出错。

在中英文操作系统中,转换正确。

网上查得知俄文的小数点是用逗号“,”表示的,问过外贸部同事,确实如此。

通过修改区域性为中文或英文,错误就没有了,找到原因了:逗号和小数点的问题

 --------------------------------------------------------------------------------------------------------------------------- 

下面给出几种解决办法:

1、如果转换的数字为“3.3”,那么转换后aa的值为“3,3”,用aa和3.5作比较是可行的

   CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();

   ci.NumberFormat.CurrencyDecimalSeparator = ".";

   float aa = float.Parse(this.textBox1.Text.Trim(),NumberStyles.Any, ci);

 

2、好像是下面三句话,试过后忘的太快了,公司不能上网没有马上记录下来,反正最后也没采用这个方法

   Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

   CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();

   float aa = float.Parse(this.textBox1.Text.Trim(), ci);

 

3、在Program.cs中加这句话修改下区域性为中文,因为开发环境是中文的,改为中文稳妥些,其它地方不用动了,一劳永逸。看CurrentCulture是线程的区域性,从字面上理解,程序调用的dll中如果有类型转换也应该可以用吧(学习的不够透彻,只能瞎猜,没有试过,有懂的朋友回复一下)。多线程的程序中,线程中也要设置。否则手动改完区域第一次运行不会出错,第二次运行就会出错,搞死我了。

   Thread.CurrentThread.CurrentCulture =new System.Globalization.CultureInfo("zh-CN");

 --------------------------------------------------------------------------------------------------------------------------- 

float   decimal  double Single 都能用

参考例子为iPMS仪表设置软件。

原创粉丝点击