鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ [ 已解決]js中65.4乘100為什么等于6540.000000000001

[ 已解決]js中65.4乘100為什么等于6540.000000000001

如題~
如何徹底根除浮點(diǎn)數(shù)運(yùn)算精度問(wèn)題?
用四舍五入在錢(qián)方面不太合理
用*100再/100的方式,在遇到特殊數(shù)值的時(shí)候還是會(huì)出現(xiàn)精度問(wèn)題

回答
編輯回答
嘟尛嘴

涉及到錢(qián)用分做單位比較方便

2017年5月6日 12:57
編輯回答
笑浮塵

題主還記得0.1+0.2!= 0.3嗎?因?yàn)?JS 采用 IEEE 754 雙精度版本(64位),并且只要采用 IEEE 754 的語(yǔ)言都有該問(wèn)題。計(jì)算機(jī)表示十進(jìn)制是采用二進(jìn)制表示的,整數(shù)除以2,商繼續(xù)除以2,得到0為止,將余數(shù)逆序排列;小數(shù)乘以2,取整,小數(shù)部分繼續(xù)乘以2,取整,得到小數(shù)部分0為止,將整數(shù)順序排列。
比如22的二進(jìn)制是10110;0.8125的二進(jìn)制是0.1101。所以,0.4的二進(jìn)制:0.4 = 0.01100110(0110)(0110) 表示循環(huán)),是無(wú)限循環(huán)的二進(jìn)制。
解決方法:可以利用toFixed() 方法,該方法可把 Number 四舍五入為指定小數(shù)位數(shù)的數(shù)字:parseFloat((65.4*100).toFixed(10))
樓主可以看看這個(gè)鏈接:幾道高級(jí)前端面試題解析
希望可以幫到你。

2017年1月6日 03:39