1.7以上版本原生平台cc.Label用浮点数赋值会自动保留六位小数出现一堆0

1.7以上版本原生平台cc.Label用浮点数赋值会自动保留六位小数出现一堆0,1.6.x版本是正常得,最近打算升级cocos版本发现了这个问题,希望能给一个解决方案,这个太纠结了,我这里有些数据只能用浮点数,但是只要一给cc.Label赋值就出现小数点后面好多0;

复现demo来一个,亲。

不需要demo,只要是原生平台,1.7,1.8的label.string = floatValue;就会保留6位小数;

一般我们是先把 浮点数 格式化为 字符串 之后,才会赋给 label.string 的。
这个格式化过程中,已经手动把浮点数误差给消除掉了

1赞

正确的做法,最好自己在js层进行格式化操作。
这的确是个bug,虽然可以修复,但是JS虚拟机把JS number 转换为 C++ double 时可能会导致精度丢失。
例如:

             cc.log(-1234567890123.1);
             cc.log(1234567890123.1);
             cc.log(1234567890123);
             cc.log(-1234567890123);
             cc.log(1234567890.1);
             cc.log(1234567890.1000);
             cc.log(1234567890.12);

输出可能为:

JS: -1234567890123.1001
JS: 1234567890123.1001
JS: 1234567890123
JS: -1234567890123
JS: 1234567890.0999999
JS: 1234567890.0999999
JS: 1234567890.1199999

所以最好自己在JS format一下,以确保显示没有问题。

用这个PR的修改试试:

https://github.com/cocos-creator/cocos2d-x-lite/pull/1081

目前V1.9 还是有bug的:
我设置 this.label.string = 39.8
会显示 39.799999999999997

还是自己JS format一下 比较稳妥