国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript中toFixed計(jì)算錯(cuò)誤(依賴銀行家舍入法的缺陷)解決方法

2024-05-06 15:12:32
字體:
供稿:網(wǎng)友

前言

在公司項(xiàng)目中涉及到一個(gè)有大量浮點(diǎn)數(shù)價(jià)格計(jì)算的模塊,從而引發(fā)了我一系列的思考:

計(jì)算機(jī)二進(jìn)制環(huán)境下浮點(diǎn)數(shù)的計(jì)算精度缺失問題;

console.log(.1+.2);0.30000000000000004

為了解決上述問題,使用了toFixed方法卻出現(xiàn)了浮點(diǎn)數(shù)小數(shù)位以5結(jié)尾的四舍五入錯(cuò)誤問題;

var num = 0.045;console.log(num.toFixed(2));0.04

以此為起點(diǎn),引發(fā)了我關(guān)于toFixed的一系列探索,終于找到了一些有用的信息,toFixed使用的計(jì)算規(guī)則是:

銀行家舍入:所謂銀行家舍入法,其實(shí)質(zhì)是一種四舍六入五取偶(又稱四舍六入五留雙)法。

簡單來說就是:四舍六入五考慮,五后非零就進(jìn)一,五后為零看奇偶,五前為偶應(yīng)舍去,五前為奇要進(jìn)一。

正文

下面我們就來證實(shí)這個(gè)所謂的銀行家舍入法,證實(shí)分為三種情況,分別以4、5、6為舍入位對toFixed的證實(shí)(以chrome為例):

以4為舍入位:

var num = 0.004;console.log(num.toFixed(2));0.00var num = 0.014;console.log(num.toFixed(2));0.01var num = 0.094;console.log(num.toFixed(2));0.09

在4結(jié)尾這種情況下toFixed表現(xiàn)的還算不錯(cuò),并沒有錯(cuò)誤的問題。

以6為舍入位:

var num = 0.006;console.log(num.toFixed(2));0.01var num = 0.016;console.log(num.toFixed(2));0.02var num = 0.096;console.log(num.toFixed(2));0.10

以6結(jié)尾這種情況下toFixed表現(xiàn)的也不錯(cuò),并沒有錯(cuò)誤的問題。

以5為舍入位:

5后非零:

var num = 0.0051;console.log(num.toFixed(2));0.01var num = 0.0052;console.log(num.toFixed(2));0.01var num = 0.0059;console.log(num.toFixed(2));0.01

根據(jù)規(guī)則,五后非零就進(jìn)一,我們證實(shí)并沒有任何的問題。

以5為舍入位:

5后為零: 由于這種情況比較特殊,是toFixed方法出現(xiàn)計(jì)算錯(cuò)誤的情況,所以我進(jìn)行了大量的證實(shí),且分別在常見的主流瀏覽器下進(jìn)行了測試:

以如下測試用例為例:

var num = 0.005;console.log(num.toFixed(2));var num = 0.015;console.log(num.toFixed(2));var num = 0.025;console.log(num.toFixed(2));var num = 0.035;console.log(num.toFixed(2));var num = 0.045;console.log(num.toFixed(2));var num = 0.055;console.log(num.toFixed(2));var num = 0.065;console.log(num.toFixed(2));var num = 0.075;console.log(num.toFixed(2));var num = 0.085;console.log(num.toFixed(2));var num = 0.095;console.log(num.toFixed(2));

chrome、firefox、safari、opera的結(jié)果如下:

0.01
0.01
0.03
0.04
0.04
0.06
0.07
0.07
0.09
0.10

ie11結(jié)果如下:

0.01
0.02
0.03
0.04
0.05

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 保德县| 太仆寺旗| 四平市| 菏泽市| 来凤县| 观塘区| 南雄市| 龙海市| 商都县| 石屏县| 枣庄市| 三门峡市| 云阳县| 同仁县| 阿拉尔市| 霍邱县| 娄底市| 高雄县| 穆棱市| 娄底市| 罗城| 张家界市| 股票| 陆河县| 肇源县| 芦山县| 库伦旗| 和硕县| 霞浦县| 城市| 大丰市| 沾化县| 安化县| 贵州省| 嘉义县| 甘孜县| 贵南县| 叶城县| 新乐市| 嘉祥县| 怀柔区|