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一下,以确保显示没有问题。
目前V1.9 还是有bug的:
我设置 this.label.string = 39.8
会显示 39.799999999999997
还是自己JS format一下 比较稳妥