区域性问题导致多语言软件运行出错
来源:互联网 发布:淘宝店铺规划 编辑:程序博客网 时间: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仪表设置软件。
- 区域性问题导致多语言软件运行出错
- Oracle中不同语言环境导致to_date出错的问题
- 区域性名称 区域性标识符 语言-国家/地区
- 金山卫士开源软件之旅(五) XML编码格式导致的运行出错
- 关于卸载软件不成功,导致再次安装软件出错的问题
- 编码问题导致python脚本运行时出错: 没有那个文件或目录
- 运行出错(数组问题)
- 多个PCL库导致编译出错的问题
- web 项目时区问题导致时间出错
- 软件多语言支持问题
- JDK更换导致以前软件不能运行
- 多线程全局对象析构导致线程运行出错
- JRE运行环境出错导致无法安装STM32CubeMX解决方法
- GetDC()导致gdi对象不断增长致软件出错
- MFC多个dll同时操作时导致资源出错问题
- ios9升级后导致的多语言问题
- C语言运行pow幂函数运行结果出错
- 平台问题导致的程序不能运行
- 结构
- 【C++Primer学习笔记】第3章 标准库类型
- 取得屏幕大小
- Flex 利用bitmap和bitmapData改变图片为黑白画
- ADC 驱动移植
- 区域性问题导致多语言软件运行出错
- 分类页面:repeater控件的应用
- 图像解析库使用范例
- 堆和栈的区别(转过无数次的文章)
- android平台调用vlc播放器的例子
- ini 文件操作
- 丢失grub的安装和修复 mbr 以及制作U盘安装grub
- android 常用对话框 ---转载
- Facestagram: 合体Instagram五个新特性YY