码迷,mamicode.com
首页 > 其他好文 > 详细

浮点数!乘100、10后精度变化!

时间:2016-07-17 13:05:29      阅读:583      评论:0      收藏:0      [点我收藏+]

标签:

 

先贴一个网址,感觉写的很详细,似乎原理都分析了,但没怎么看,好像没说怎么解决...

http://justjavac.iteye.com/blog/1864938

 

现象:

0.56*100 // 56.00000000000001
0.56*10 // 5.6000000000000005
0.57*10 // 5.699999999999999
5.6/10 // 0.5599999999999999

 

包括ie6的所有浏览器都是如此

 

出现场景

需要把0.56 显示为 56% ,然后居然是56.00000000000001% ,无语了

 

解决:

 

似乎正常了:

0.57*1000/10

 

但这种情况问题依旧:

0.5757*1000/10 // 57.57000000000001

原因是:

575.7/10 // 原因是5.7除了10

 

发现规律:避免0.56、5.6附近的一位或两位小数对 100或者10进行 乘除

 

 

所以:先乘比小数多一位的倍数,再除去多余倍数

0.5757*100000/1000 //正常

但这种方案,没有依靠原理,凭了大部分直觉,所以,上硬招:

先转字符串,再移动小数点。但这种方案效率要低些...

function toPercent(num) {
    var arr = (num + ‘‘).split(‘.‘),
        otherHalf = (arr[1] ? arr[1] : ‘‘) + ‘000‘;
    otherHalf = otherHalf.substr(0, 2) + ‘.‘ + otherHalf.substr(2);

    return (arr[0] + otherHalf) * 1;
}
toPercent(.57) // 57
toPercent(5.7) // 570
toPercent(57) // 5700

 

 

 

浮点数!乘100、10后精度变化!

标签:

原文地址:http://www.cnblogs.com/cqlql/p/5677557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!