原因
游戏上线后,玩家反馈系统语言为德语时会有问题,经排查测试,发现是德语的浮点数转化,也就是float.parser对于德语来说会有问题。
在中国和英国,表示小数是用 小数点,即:0.123。但是在德国,表示小数则是用 逗号,即 0,123。德国的浮点数没有"."一说。float.Parse(“0.123”),那么读出来的将会是123.
这时候就要讨论C#浮点数的转化原理了。因为C#是面向全球性的应用语言,不同国家有不同的文化,借助CultureInfo使整个.NET Framework更加人性化,因为这可以使同一个数据适应不同地区和文化,这样当然满足处于不同地区和文化的用户。但前提是数据给“人”看,如果这些数据用于计算机之间的传输,即给“机器”看,这样的多文化处理反而不妥,造成同一个数据的不同展现形式,尤其是读写两方的文化地区不同时,数据可能根本无法被正常读取或者产生潜在bug。
总结来说,浮点数转化、日期转化都是借助ClutureInfo实现的。文章来源:https://www.toymoban.com/news/detail-794177.html
知道了原理,那么就大概知道怎么解决了。文章来源地址https://www.toymoban.com/news/detail-794177.html
解决
- 将当前线程影响浮点数的所有格式固定(注意,这样会导致不同时区显示的日期格式等都固定为一种形式)
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);
到了这里,关于系统语言德语时浮点数转化问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!