系统语言德语时浮点数转化问题

13 篇文章 0 订阅

原因

游戏上线后,玩家反馈系统语言为德语时会有问题,经排查测试,发现是德语的浮点数转化,也就是float.parser对于德语来说会有问题。

在中国和英国,表示小数是用 小数点,即:0.123。但是在德国,表示小数则是用 逗号,即 0,123。德国的浮点数没有"."一说。float.Parse(“0.123”),那么读出来的将会是123.

这时候就要讨论C#浮点数的转化原理了。因为C#是面向全球性的应用语言,不同国家有不同的文化,借助CultureInfo使整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造成同一个数据的不同展现形式,尤其是读写两方的文化地区不同时,数据可能根本无法被正常读取或者产生潜在bug。

总结来说,浮点数转化、日期转化都是借助ClutureInfo实现的。

知道了原理,那么就大概知道怎么解决了。

解决

  • 将当前线程影响浮点数的所有格式固定(注意,这样会导致不同时区显示的日期格式等都固定为一种形式)
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
     
  • 强制用"."分隔浮点数
    var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
    culture.NumberFormat.NumberDecimalSeparator = ".";
    float number = float.Parse("0.24", culture);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼蛋-Felix

如果对你有用,可以请我喝杯可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值