parseFloat的精度問題
寫js時(shí)遇到的問題,已經(jīng)解決,做筆記
在js中進(jìn)行以元為單位進(jìn)行金額計(jì)算時(shí) 使用parseFloat會(huì)產(chǎn)生精度問題
var price = 10.99;
var quantity = 7;
var needPay = parseFloat(price * quantity);
needPay的正確結(jié)果應(yīng)該是76.93元 但是運(yùn)行后發(fā)現(xiàn)needPay為76.93000000000001
此情況可通過 toFixed(n) 方法修正 但是這個(gè)方法對(duì) js版本要求較高 不能兼容ie5
另一個(gè)解決方案是: 將元為單位的金額乘以100換算為分進(jìn)行計(jì)算
var price = 10.99
var quantity = 7
var needPay = Math.floor(parseFloat(price*100 * quantity))/100;
parseFloat(price*100 * quantity)的計(jì)算結(jié)果是7693.000000000001 使用Math.round()方法四舍五入,再除100 即為正確的結(jié)果
PS:順便學(xué)到了一點(diǎn):Math.ceil() Math.floor() Math.round() 的區(qū)別
Math.ceil() 是向上取整
Math.floor()是向下取整
Math.round()是四舍五入
posted @ 2009-01-10 17:11 NWU紫氣東來 閱讀(1772) | 評(píng)論 (0) | 編輯 收藏