Javascript中 toFixed四舍六入方法
javascript中toFixed使用的是銀行家舍入規(guī)則。
銀行家舍入:所謂銀行家舍入法,其實(shí)質(zhì)是一種四舍六入五取偶(又稱(chēng)四舍六入五留雙)法。
簡(jiǎn)單來(lái)說(shuō)就是:四舍六入五考慮,五后非零就進(jìn)一,五后為零看奇偶,五前為偶應(yīng)舍去,五前為奇要進(jìn)一。但是不論引入toFixed解決浮點(diǎn)數(shù)計(jì)算精度缺失的問(wèn)題也好,它有沒(méi)有使用銀行家舍入法也罷,都是為了解決精度的問(wèn)題,但是又離不開(kāi)二進(jìn)制浮點(diǎn)數(shù)的環(huán)境,但至少他幫助我們找到了問(wèn)題所在,從而讓我們有解決方法。
Number.prototype.toFixed = function(length)
{
var carry = 0; //存放進(jìn)位標(biāo)志
var num,multiple; //num為原浮點(diǎn)數(shù)放大multiple倍后的數(shù),multiple為10的length次方
var str = this + ''; //將調(diào)用該方法的數(shù)字轉(zhuǎn)為字符串
var dot = str.indexOf("."); //找到小數(shù)點(diǎn)的位置
if(str.substr(dot+length+1,1)>=5) carry=1; //找到要進(jìn)行舍入的數(shù)的位置,手動(dòng)判斷是否大于等于5,滿(mǎn)足條件進(jìn)位標(biāo)志置為1
multiple = Math.pow(10,length); //設(shè)置浮點(diǎn)數(shù)要擴(kuò)大的倍數(shù)
num = Math.floor(this * multiple) + carry; //去掉舍入位后的所有數(shù),然后加上我們的手動(dòng)進(jìn)位數(shù)
var result = num/multiple + ''; //將進(jìn)位后的整數(shù)再縮小為原浮點(diǎn)數(shù)
/*
* 處理進(jìn)位后無(wú)小數(shù)
*/
dot = result.indexOf(".");
if(dot < 0){
result += '.';
dot = result.indexOf(".");
}
/*
* 處理多次進(jìn)位
*/
var len = result.length - (dot+1);
if(len < length){
for(var i = 0; i < length - len; i++){
result += 0;
}
}
return result;
}
該方法的大致思路是首先找到舍入位,判斷該位置是否大于等于5,條件成立手動(dòng)進(jìn)一位,然后通過(guò)參數(shù)大小將原浮點(diǎn)數(shù)放大10的參數(shù)指數(shù)倍,然后再將包括舍入位后的位數(shù)利用floor全部去掉,根據(jù)我們之前的手動(dòng)進(jìn)位來(lái)確定是否進(jìn)位。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS處理數(shù)據(jù)四舍五入(tofixed與round的區(qū)別詳解)
- JS使用tofixed與round處理數(shù)據(jù)四舍五入的區(qū)別
- Javascript中toFixed計(jì)算錯(cuò)誤(依賴(lài)銀行家舍入法的缺陷)解決方法
- JavaScript中Number對(duì)象的toFixed() 方法詳解
- js toFixed()方法的重寫(xiě)實(shí)現(xiàn)精度的統(tǒng)一
- js保留兩位小數(shù)使用toFixed實(shí)現(xiàn)
- javascript中的toFixed固定小數(shù)位數(shù) 簡(jiǎn)單實(shí)例分享
- JS中toFixed()方法引起的問(wèn)題如何解決
- JavaScript toFixed() 方法
- javascript之對(duì)系統(tǒng)的toFixed()方法的修正
- javascript中toFixed()四舍五入使用方法詳解
相關(guān)文章
js實(shí)現(xiàn)div拖動(dòng)動(dòng)畫(huà)運(yùn)行軌跡效果代碼分享
這篇文章主要介紹了js實(shí)現(xiàn)div拖動(dòng)動(dòng)畫(huà)運(yùn)行軌跡效果,推薦給大家,有需要的小伙伴可以參考下。2015-08-08
JavaScript 利用Cookie記錄用戶(hù)登錄信息
JavaScript與Cookie之利用Cookie記錄用戶(hù)登錄信息2009-12-12
通過(guò)js動(dòng)態(tài)操作table(新增,刪除相關(guān)列信息)
通過(guò)js動(dòng)態(tài)操作table(新增,刪除相關(guān)列信息)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-05-05
JavaScript正則表達(dá)式替換字符串中圖片地址(img src)的方法
這篇文章主要介紹了JavaScript正則表達(dá)式替換字符串中圖片地址(img src)的方法,結(jié)合實(shí)例形式分析了JS正則替換的常用技巧與注意事項(xiàng),需要的朋友可以參考下2017-01-01
PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法
這篇文章主要介紹了PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法,使用本文方法可以在一個(gè)類(lèi)中不用在寫(xiě)大量的set方法或get方法,需要的朋友可以參考下2014-11-11
JavaScript 預(yù)解析的4種實(shí)現(xiàn)方法解析
這篇文章主要介紹了JavaScript 預(yù)解析的4種實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Google 爬蟲(chóng)如何抓取 JavaScript 的內(nèi)容
我們測(cè)試了谷歌爬蟲(chóng)是如何抓取 JavaScript,下面就是我們從中學(xué)習(xí)到的知識(shí),需要的朋友可以參考下2017-04-04

