|
@@ -2,6 +2,9 @@
|
|
* Created by jimiz on 2017/3/28.
|
|
* Created by jimiz on 2017/3/28.
|
|
* 经验证:10000次四舍五入,用num.toFixed为15毫秒,用roundTo为47毫秒,速度低一些,但可以接受
|
|
* 经验证:10000次四舍五入,用num.toFixed为15毫秒,用roundTo为47毫秒,速度低一些,但可以接受
|
|
* 另:经手工验证,用num.toString(2)将十进制浮点数转换为二进制浮点数时,最后一位有错误的情况出现,例子(10.0311)
|
|
* 另:经手工验证,用num.toString(2)将十进制浮点数转换为二进制浮点数时,最后一位有错误的情况出现,例子(10.0311)
|
|
|
|
+ *
|
|
|
|
+ * zhangyin 2018-02-28
|
|
|
|
+ * 采用重复一次四舍五入解决浮点精度误差后,10000次roundTo的时间为94毫秒。
|
|
*/
|
|
*/
|
|
|
|
|
|
let scMathUtil = {
|
|
let scMathUtil = {
|
|
@@ -152,10 +155,17 @@ let scMathUtil = {
|
|
};
|
|
};
|
|
return result;
|
|
return result;
|
|
},
|
|
},
|
|
- roundTo: function(num, digit){
|
|
|
|
|
|
+ reRoundTo: function(num, digit){
|
|
let me = this;
|
|
let me = this;
|
|
return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
|
|
return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
|
|
},
|
|
},
|
|
|
|
+ // zhangyin 2018-02-28
|
|
|
|
+ // 经过运算后的浮点数,误差可能更大,加尾数也不能消除。目前采用笨办法,将有效位数加一位再四舍五入一次,以消除浮点误差。
|
|
|
|
+ // 此办法效率较低,没有别的更好办法时暂时用着
|
|
|
|
+ roundTo: function(num, digit){
|
|
|
|
+ let me = this;
|
|
|
|
+ return me.reRoundTo(me.reRoundTo(num, digit - 1), digit);
|
|
|
|
+ },
|
|
isNumber : function (obj) {
|
|
isNumber : function (obj) {
|
|
return obj === +obj;
|
|
return obj === +obj;
|
|
},
|
|
},
|