先贴一个网址,感觉写的很详细,似乎原理都分析了,但没怎么看,好像没说怎么解决...
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
时间: 2024-10-07 21:12:19