js浮點(diǎn)數(shù)運(yùn)算財(cái)務(wù)系統(tǒng)精確計(jì)算

[toc]

背景

  • 項(xiàng)目中用到浮點(diǎn)數(shù),Int 等 js中 Number類型比較多思币, 加上牽涉到財(cái)務(wù)軟件羡微, 前臺js運(yùn)算等妈倔。 有時(shí)候會出現(xiàn)精確度的問題 , 公共方法中有好事者寫的方法盯蝴。 此處拿來借鑒。

具體代碼

  • 此處拿來借鑒
//數(shù)字的四則運(yùn)算:修復(fù)js運(yùn)算的誤差bug
function InitNumberOperation() {
    //除法函數(shù)虑绵,用來得到精確的除法結(jié)果
    //說明:javascript的除法結(jié)果會有誤差翅睛,在兩個(gè)浮點(diǎn)數(shù)相除的時(shí)候會比較明顯疏旨。這個(gè)函數(shù)返回較為精確的除法結(jié)果。
    //調(diào)用:accDiv(arg1,arg2)
    //返回值:arg1除以arg2的精確結(jié)果
    function accDiv(arg1, arg2) {
        var t1 = 0, t2 = 0, r1, r2;
        try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
        try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
        with (Math) {
            r1 = Number(arg1.toString().replace(".", ""));
            r2 = Number(arg2.toString().replace(".", ""));
            return (r1 / r2) * pow(10, t2 - t1);
        }
    }
    //給Number類型增加一個(gè)div方法充石,調(diào)用起來更加方便骤铃。
    Number.prototype.div = function (arg) {
        return accDiv(this, arg);
    };
    //乘法函數(shù)惰爬,用來得到精確的乘法結(jié)果
    //說明:javascript的乘法結(jié)果會有誤差撕瞧,在兩個(gè)浮點(diǎn)數(shù)相乘的時(shí)候會比較明顯。這個(gè)函數(shù)返回較為精確的乘法結(jié)果丛版。
    //調(diào)用:accMul(arg1,arg2)
    //返回值:arg1乘以arg2的精確結(jié)果
    function accMul(arg1, arg2) {
        var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
        try { m += s1.split(".")[1].length } catch (e) { }
        try { m += s2.split(".")[1].length } catch (e) { }
        return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
    }
    //給Number類型增加一個(gè)mul方法页畦,調(diào)用起來更加方便豫缨。
    Number.prototype.mul = function (arg) {
        return accMul(arg, this);
    };
    //加法函數(shù)端朵,用來得到精確的加法結(jié)果
    //說明:javascript的加法結(jié)果會有誤差冲呢,在兩個(gè)浮點(diǎn)數(shù)相加的時(shí)候會比較明顯。這個(gè)函數(shù)返回較為精確的加法結(jié)果邻薯。
    //調(diào)用:accAdd(arg1,arg2)
    //返回值:arg1加上arg2的精確結(jié)果
    function accAdd(arg1, arg2) {
        var r1, r2, m;
        try { r1 = arg1.toString().split(".")[1].length; } catch (e) { r1 = 0; }
        try { r2 = arg2.toString().split(".")[1].length; } catch (e) { r2 = 0; }
        m = Math.pow(10, Math.max(r1, r2));
        return (arg1 * m + arg2 * m) / m;
    }
    //給Number類型增加一個(gè)add方法,調(diào)用起來更加方便挽懦。
    Number.prototype.add = function (arg) {
        return accAdd(arg, this);
    };
    //減法函數(shù)
    function accSub(arg1, arg2) {
        var r1, r2, m, n;
        try {
            r1 = arg1.toString().split(".")[1].length;
        } catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0;
        }
        m = Math.pow(10, Math.max(r1, r2));
        //last modify by deeka
        //動態(tài)控制精度長度
        n = (r1 >= r2) ? r1 : r2;
        return ((arg2 * m - arg1 * m) / m).toFixed(n);
    }
    ///給number類增加一個(gè)sub方法冀偶,調(diào)用起來更加方便
    Number.prototype.sub = function (arg) {
        return accSub(arg, this);
    };
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末进鸠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子客年,更是在濱河造成了極大的恐慌霞幅,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件量瓜,死亡現(xiàn)場離奇詭異司恳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绍傲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門扔傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烫饼,你說我怎么就攤上這事猎塞。” “怎么了杠纵?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵荠耽,是天一觀的道長。 經(jīng)常有香客問我淡诗,道長款违,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任毅弧,我火速辦了婚禮寸宵,結(jié)果婚禮上巫员,老公的妹妹穿的比我還像新娘简识。我一直安慰自己七扰,他們只是感情好拷泽,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般捞奕。 火紅的嫁衣襯著肌膚如雪恨搓。 梳的紋絲不亂的頭發(fā)上常拓,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天掂恕,我揣著相機(jī)與錄音,去河邊找鬼斋配。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甩卓,可吹牛的內(nèi)容都是我干的宅此。 我是一名探鬼主播弱匪,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尖奔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纺且,沒想到半個(gè)月后衅枫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體益楼,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡队橙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年解总,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了花枫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佳簸。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汉买,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邻吞,到底是詐尸還是另有隱情葫男,我是刑警寧澤旺遮,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布耿眉,位于F島的核電站筐骇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擒悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲁森。 院中可真熱鬧,春花似錦骑晶、人聲如沸痛垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匙头。三九已至,卻和暖如春仔雷,著一層夾襖步出監(jiān)牢的瞬間蹂析,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工碟婆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留识窿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓脑融,卻偏偏與公主長得像喻频,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子肘迎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容