javascript 定時器內累加小數後變成16位的浮點數,這是啥意思?
請看這:
var startNum = 1; setInterval(function () { startNum += 0.1; console.log(startNum); }, 500);
列印出來是這樣的:
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
1.6000000000000005
這難道是坑嗎?鬱悶。
回複內容:
javascript 定時器內累加小數後變成16位的浮點數,這是啥意思?
請看這:
var startNum = 1; setInterval(function () { startNum += 0.1; console.log(startNum); }, 500);
列印出來是這樣的:
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
1.6000000000000005
這難道是坑嗎?鬱悶。
很正常,這是由於精確度造成的問題,不信你試一下0.1+0.2不等於0.3。
http://segmentfault.com/q/1010000000137297
看這個標準 http://www.baidu.com/link?url=ax1PkOuwwFU_KTyr29jOuhSr9v-i-Zg8fqAqty9Xbo_2oLAYg-_2CIIPeo3HKbXV3ohudDm6DKjK4rvzhGwao2rsRd7MF6QsEwQO9ShILXc1nIK3oHeI90MDFEyXBmtcTmhycPcznpwUvWH_emJzZ7IMNbn99fBEs8G4iphb32e&wd=&eqid=9ac65804000049bc00000005568e60b4
要利用程式設計語言計算小數的話最好先轉換為整數計算