在做多语言软件时,因为客户是俄罗斯的,碰到一个怪问题
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仪表设置软件。