C#处理印尼地区的数字分隔符方法
1.在印尼 数字中的 小数点 和 千分位分隔符 的用法与欧美习惯相反
- 逗号(,) 用作 小数点(如 1,23 表示 1.23)。
- 点(.) 用作 千分位分隔符(如 1.000 表示 1000)。
查阅资料后发现,世界上很多国家都是使用这种数据分割符的,如: 德国、法国、意大利、西班牙、荷兰、比利时、葡萄牙、奥地利、丹麦、瑞典、芬兰、挪威、波兰、捷克、匈牙利等 大多数欧洲大陆国家 。
2.咱们大中国采用的数据分隔符是英美格式的
如:1.23就是表示1.23
1,000就是表示1000
3.此次做跨国项目,由于公司的WMS系统是部署在中国的云服务器上的,而数据之间是通过webservice的字符串传输。如果传输1.000的收货数量给中国的wms系统,wms系统会认为收货数量只有1。数据传输不准会出现大问题。
4.解决方法
方法1:修改本地电脑配置,将印尼的时区和数字格式修改成与中国一致。(显然不合适,就算修改了系统,也不符合本地人的使用习惯)
方法2:修改代码(C#),移除数字格式,采用不依赖于区域性的数字格式,代码如下:
public class NumberFormatConverter{ /// <summary>/// 将对象转换为不变文化格式的字符串 (.NET 3.5 兼容)/// </summary>public static string ToInvariantString(object value){if (value == null || value == DBNull.Value){return string.Empty;}// 处理数字类型if (value is IFormattable){return ((IFormattable)value).ToString(null, CultureInfo.InvariantCulture);}// 处理其他类型return value.ToString();}}
注意:入参必须要能转化为字符串的类型,且不能是字符串类型本身。
调用代码参考
material.OpenQty = NumberFormatConverter.ToInvariantString(dt_Material.Rows[i]["DEMAND_QTY"]);
5.进行测试,完美解决问题