成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

“銀行家算法”大揭秘!在前端表格中利用自定義公式實現(xiàn)“四舍六入五成雙”

開發(fā) 前端 算法
在實際應(yīng)用中,我們使用銀行家算法最多的情況就是在大數(shù)據(jù)量的表格計算中,但是在表格計算中需要通過一系列的內(nèi)置公式進(jìn)行復(fù)合。

銀行的盈利模式是什么?三個字:信息差!從儲戶手中收攏資金,然后放貸出去,而所謂的“利潤”就是這其中的利息差額。

在我國,人民銀行規(guī)定每個季度月末的20號為銀行結(jié)息日,每一年四次結(jié)息,因此每年需要非常頻繁的計算付給儲戶的利息。在計算利息時,小數(shù)點如何處理就變得很重要,并成為決定利潤多少的關(guān)鍵細(xì)節(jié)。

通常,我們都知道在保留小數(shù)點的時候,常常會用到四舍五入。小于5的數(shù)字被舍去,大于等于5的數(shù)字進(jìn)位后舍去,由于所有位上的數(shù)字都是自然計算出來的,按照概率計算可知,被舍入的數(shù)字均勻分布在0到9之間。

我們不妨以10筆存款利息計算作為模型,以銀行家的身份來思考這個算法:

四舍,舍棄的值包含: 0.000、0.001、0.002、0.003、0.004,對銀行而言舍棄的內(nèi)容就不再需要支付,所以舍棄的部分我們可以理解為“賺到了”。

五入,進(jìn)位的內(nèi)容包括:0.005、0.006、0.007、0.008、0.009,對銀行而言進(jìn)位內(nèi)容會造成虧損,對應(yīng)虧損的金額則是: 0.005、0.004、0.003、0.002、0.001。

因為舍棄和進(jìn)位的數(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筆的利息,通過四舍五入計算就會導(dǎo)致0.005元的損失,即每筆利息計算損失0.0005元。假設(shè)某家銀行有5千萬儲戶,每年僅僅因為四舍五入的誤差而損失的金額是:

public class Client {  
public static void main(String[] args) {
//銀行賬戶數(shù)量,5千萬
int accountNum =5000*10000;
//按照人行的規(guī)定,每個季度末月的20日為銀行結(jié)息日
double cost = 0.0005 * accountNum * 4 ;
System.out.println("銀行每年損失的金額:" + cost);
}
}

計算結(jié)果是:“銀行每年損失的金額:100000.0”。你可能難以相信,四舍五入小小一個動作,就導(dǎo)致了每年損失10萬。但在真實環(huán)境中,實際損失可能是更多。

這個情況是由美國的私人銀行家發(fā)現(xiàn),為了解決這一情況提出了一個修正算法:

“舍去位的數(shù)值小于5時,直接舍去;

舍去位的數(shù)值大于等于6時,進(jìn)位后舍去;

當(dāng)舍去位的數(shù)值等于5時,分兩種情況:5后面還有其他數(shù)字(非0),則進(jìn)位后舍去;若5后面是0(即5是最后一個數(shù)字),則根據(jù)5前一位數(shù)的奇偶性來判斷是否需要進(jìn)位,奇數(shù)進(jìn)位,偶數(shù)舍去。”

以上這么多,匯成一句話就是:四舍六入五考慮,五后非零就進(jìn)一,五后為零看奇偶,五前為偶應(yīng)舍去,五前為奇要進(jìn)一。

我們舉例說明,取2位精度:

10.5551= 10.56

10.555= 10.56

10.545= 10.54

(圖片來自于網(wǎng)絡(luò))

簡單來說,有了“四舍六入五成雙”這樣的銀行家算法,就可以更為科學(xué)精確地處理數(shù)據(jù)。

在實際應(yīng)用中,我們使用銀行家算法最多的情況就是在大數(shù)據(jù)量的表格計算中,但是在表格計算中需要通過一系列的內(nèi)置公式進(jìn)行復(fù)合。對于普通用戶來說無論是理解還是最終使用,都很繁瑣且復(fù)雜。

為了更加方便地解決這個問題,我們可以通過自定義函數(shù)來完成這樣的需求,這樣用戶只需要記住自定義的函數(shù)名即可使用具有這樣一個規(guī)則的函數(shù)。

接下來我們一起看看,如何在前端表格中快速地實現(xiàn)“四舍六入五成雙”。

我們首先需要定義函數(shù)的名稱,以及里面的參數(shù)數(shù)目。因為我們想要實現(xiàn)的是,傳遞兩個參數(shù),“1”是需要被約修的數(shù)值,“2”是保留小數(shù)點后面的位數(shù),根據(jù)值和位數(shù)進(jìn)行約修。

var FdaFunction = function() {
this.name = "FDA";
this.minArgs = 1;
this.maxArgs = 2;
};

接下來就是為了方便用戶理解和使用,我們需要對這個自定義函數(shù)添加一些描述:

FdaFunction.prototype.description = function() {
return {
description: "對value進(jìn)行四舍六入五留雙修約,保留小數(shù)點后指定位數(shù)",
parameters: [{
name: "value",
repeatable: false,
optional: false
}, {
name: "places",
repeatable: false,
optional: false
}]
}
}

最后到了關(guān)鍵步驟,也就是函數(shù)的邏輯運行都放在evaluate中,我們會對傳入的值做一些判斷,并且會利用正則表達(dá)式做一些匹配。要實現(xiàn)“五成雙”,那么我們還要對需要約修的最后一個位值做判斷,來決定是否進(jìn)位。具體可以參考附件完整的demo。

FdaFunction.prototype.evaluate = function(context, num, places) {

if (!isNaN(parseInt(num)) && !isNaN(parseInt(places))) {
console.log("evaluate")
num = numGeneral(num);
if (!isNumber(num)) {
return num;
}
var d = places || 0;
var m = Math.pow(10, d);
var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors
var i = Math.floor(n),
f = n - i;
var e = 1e-8; // Allow for rounding errors in f
var r = f > 0.5 - e && f < 0.5 + e ? (i % 2 == 0 ? i : i + 1) : Math.round(n);
var result = d ? r / m : r;

if (places > 0) {
var s_x = result.toString();
var pos_decimal = s_x.indexOf(".");
if (pos_decimal < 0) {
pos_decimal = s_x.length;
s_x += ".";
}
while (s_x.length <= pos_decimal + places) {
s_x += "0";
}
return s_x;
} else {
return result;
}
}else{
return "#VALUE!";
}

}

體驗下載完整demo:

??https://gcdn.grapecity.com.cn...??

大家如果想了解更多與自定義公式相關(guān)內(nèi)容,可以查看鏈接:

??https://demo.grapecity.com.cn...??

責(zé)任編輯:張燕妮 來源: 葡萄城技術(shù)團隊
相關(guān)推薦

2012-08-27 14:23:50

2022-05-18 07:44:13

自定義菜單前端

2022-01-27 11:36:16

加密貨幣尼泊爾比特幣

2009-11-10 17:22:23

VB.NET Form

2015-07-29 10:31:16

Java緩存算法

2010-06-09 11:09:06

MySQL四舍五入

2014-03-27 11:02:42

2014第二屆玖富銀行

2010-09-09 11:03:32

CSS樣式

2021-11-23 15:06:42

Kubernetes 運維開源

2009-09-07 22:00:15

LINQ自定義

2010-06-02 14:42:57

MySQL四舍五入

2011-03-31 16:03:20

cacti性能計數(shù)器

2011-04-06 10:03:08

Cacti遠(yuǎn)程監(jiān)控

2024-04-03 09:18:03

Redis數(shù)據(jù)結(jié)構(gòu)接口防刷

2011-08-12 18:18:03

iPhone開發(fā)UIPageContr按鈕

2011-06-15 09:24:36

Qt Widget Model

2016-10-28 15:01:35

Cookie前端實踐
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品国产欧美在线 | 欧美一级在线免费 | 日韩欧美在线视频播放 | 久久最新精品 | 日本三级电影在线看 | 99久久精品免费看国产免费软件 | 亚洲一区国产 | 亚洲免费观看视频网站 | 五月花丁香婷婷 | 久久精品久久久久久 | 日韩电影免费观看中文字幕 | 中文字幕在线精品 | 精品国产一区二区三区四区在线 | 国产视频一区在线 | 久久久久久久久国产成人免费 | 国产精品久久久久久高潮 | 亚洲人的av| 女同久久另类99精品国产 | 一级高清| 成人伊人网 | 综合一区 | 天天搞天天搞 | 国产九九九九 | 国产精品亚洲欧美日韩一区在线 | 亚洲精品在线免费观看视频 | 一区二区三区免费 | 精品国产一区二区三区性色 | 午夜激情免费视频 | 日日干日日色 | 精品福利在线 | 中文一区二区 | 亚洲国产一区二区三区在线观看 | 成年人免费网站 | 欧美日韩在线观看一区 | 国产美女视频黄a视频免费 国产精品福利视频 | 欧美日韩一 | 亚洲一区在线观看视频 | 久久精品国产亚洲一区二区 | 亚洲精品久久久久久久久久吃药 | 国产伦一区二区三区久久 | 中文字幕欧美在线观看 |