銀行家舍入法

一句話介紹

四舍六入五考慮灾票,五后非零就進一摇邦,五后為零看奇偶,五前為偶應舍去趾撵,五前為奇要進一侄柔。

疑問

一直以為 JavaScripttoFixed() 是四舍五入的,但今天卻驚訝地發(fā)現(xiàn):它并不是一直都會四舍五入的

1.35.toFixed(1) // 1.4
1.45.toFixed(1) // 1.4

為什么對于相同的尾數(shù)5的舍入占调,結(jié)果卻不同呢暂题?
因為 toFixed() 使用的是“銀行家舍入法”

銀行家舍入法是由 IEEE 754 標準規(guī)定的浮點數(shù)取整算法,大部分的編程軟件都使用這種方法究珊。

當舍去位的數(shù)值:

  • 小于等于4薪者,直接舍去該位
  • 大于等于6,向前位進一
  • 等于5
    • 5后有數(shù)剿涮,向前位進一
    • 5后全0
      • 5前位數(shù)值為奇言津,則向前位進一(將前位湊成偶)
      • 5前位數(shù)值為偶,則直接舍去該位

場景

我們知道銀行的盈利渠道主要是利息差取试,從儲戶手里收攏資金悬槽,然后放貸出去,其間的利息差額便是所獲得的利潤瞬浓。對一個銀行來說初婆,對付給儲戶的利息的計算非常頻繁。

假如我們使用四舍五入法瑟蜈,且假設銀行收到的錢中烟逊,要舍入的那位數(shù)在0~9是等概率的,那么假設銀行分別收到了 0.000, 0.001, ..., 0.009 元铺根,然后通過四舍五入法宪躯,銀行能夠得到五個 0.000 和五個 1.000,也許在概率上看起來是公平的位迂,但是:

以銀行家的身份來思考這個算法:
  • (1)四舍:舍棄的數(shù)值:0.000访雪、0.001详瑞、0.002、0.003臣缀、0.004坝橡,因為是舍棄,對銀行家來說精置,就是不用付款給儲戶的计寇,那每舍棄一個數(shù)字就會賺取相應的金額:0.000脂倦、0.001番宁、0.002、0.003赖阻、0.004蝶押。

  • (2)五入:進位的數(shù)值:0.005、0.006火欧、0.007棋电、0.008、0.009苇侵,因為是進位赶盔,對銀行家來說,每進一位就會多付款給儲戶衅檀,也就是虧損了招刨,那虧損部分就是其對應的10進制補數(shù):0.005霎俩、0.004哀军、0.003、0.002打却、0.001

因為舍棄和進位的數(shù)字是在0到9之間均勻分布的杉适,所以對于銀行家來說,每10筆存款的利息因采用四舍五入而獲得的盈利是:
0.000 + 0.001 + 0.002 + 0.003 + 0.004 - 0.005 - 0.004 - 0.003 - 0.002 - 0.001 = -0.005
也就是說柳击,每10筆的利息計算中就虧損0.005元猿推,即每筆利息計算損失0.0005元

問題:為什么銀行家舍入是合理的?

  • 四舍六入本身沒問題捌肴,5前偶舍奇進也沒問題蹬叭,關(guān)鍵在為什么5后有非0數(shù)要進位?
  • 遇5舍棄的情況只有一種状知,即5是最后一位有效的數(shù)字且前一位數(shù)是偶數(shù)
  • 當數(shù)值精度達到5后一位秽五,其為0的概率為1/10,5前為偶數(shù)的概率是1/2饥悴,所以舍5的概率是1/10 * 1/2 = 1/20坦喘,而進5的概率是19/20
  • 當數(shù)值精度越大盲再,舍5個概率就越低,無限趨近于0瓣铣,也就是說答朋,當數(shù)值精度越高,該算法越像“四舍五入”
  • 那么棠笑,為什么這個算法是合理的呢梦碗?
  • 現(xiàn)實情況就是數(shù)值的精度不可能無限大,存款利息率一般為百分之零點幾蓖救,而數(shù)值精度一般4位叉弦,5后存在非0數(shù)的概率相對較小,所以趨近于1/2舍5藻糖,1/2進5

后記

說是 toFixed() 使用的銀行家舍入法所以表現(xiàn)起來不是四舍五入淹冰,但是在 Chrome 瀏覽器的實測中,我注意到它也并不一定都符合銀行家舍入法:

0.45.toFixed(1) // 0.5 而不是0.4
1.45.toFixed(1) // 1.4

個人認為巨柒,這可能是由于浮點數(shù)存儲精度問題導致的(未查閱資料證實)樱拴。

比如這里的 0.45其實類似于0.4500000002,存在一點點尾數(shù)洋满,所以進行了舍入變?yōu)?.5晶乔。

有人認為因此在嚴肅的情況下不應使用 toFixed(),不過我個人倒是認為誤差是隨機的牺勾,所以從概率而言最后得到的結(jié)果還是公平的正罢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驻民,隨后出現(xiàn)的幾起案子翻具,更是在濱河造成了極大的恐慌,老刑警劉巖回还,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆泳,死亡現(xiàn)場離奇詭異,居然都是意外死亡柠硕,警方通過查閱死者的電腦和手機工禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗柔,“玉大人闻葵,你說我怎么就攤上這事⊙⑸ィ” “怎么了槽畔?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坎缭。 經(jīng)常有香客問我竟痰,道長签钩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任坏快,我火速辦了婚禮铅檩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莽鸿。我一直安慰自己昧旨,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布祥得。 她就那樣靜靜地躺著兔沃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪级及。 梳的紋絲不亂的頭發(fā)上乒疏,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音饮焦,去河邊找鬼怕吴。 笑死,一個胖子當著我的面吹牛县踢,可吹牛的內(nèi)容都是我干的转绷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼硼啤,長吁一口氣:“原來是場噩夢啊……” “哼议经!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谴返,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤煞肾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亏镰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扯旷,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拯爽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年索抓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毯炮。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡逼肯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桃煎,到底是詐尸還是另有隱情篮幢,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布为迈,位于F島的核電站三椿,受9級特大地震影響缺菌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搜锰,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一伴郁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛋叼,春花似錦焊傅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歌馍,卻和暖如春握巢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背松却。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工镜粤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玻褪。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓肉渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親带射。 傳聞我的和親對象是個殘疾皇子同规,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

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