File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ## 編號:CANDY-025
2+
3+ ### 程式語言:JavaScript
4+
5+ #### 題目:
6+
7+ 一般我們常見的四捨五入計算方式在統計上容易造成計算偏差,於是有人推出了「銀行家捨入法」用來稍微平衡計算偏差,計算方式是「四捨六入五成雙」,當捨入計算位數剛好是 5 的時候,會算出離這個數字比較近的偶數。
8+
9+ ``` js
10+ function bankersRounding (num , digits = 0 ) {
11+ const factor = 10 ** digits;
12+ const shiftedNum = num * factor;
13+ const integerPart = Math .floor (shiftedNum);
14+ const decimalPart = shiftedNum - integerPart;
15+
16+ if (decimalPart > 0.5 ) {
17+ return Math .ceil (shiftedNum) / factor;
18+ } else if (decimalPart < 0.5 ) {
19+ return Math .floor (shiftedNum) / factor;
20+ } else {
21+ const isEven = integerPart % 2 === 0 ;
22+ return (isEven ? integerPart : integerPart + 1 ) / factor;
23+ }
24+ }
25+
26+ // 設定 factor 用來移動小數點
27+ // 設定 shiftedNum 用來移動小數點後的數值
28+ // integerPart 為取整數部分
29+ // decimalPart 為取小數部分
30+ // 計算四捨六入
31+ // 當小數剛好為 0.5
32+ // 判斷整數部分是奇數還是偶數
33+
34+ console .log (bankersRounding (0.4 )); // 0
35+ console .log (bankersRounding (0.6 )); // 1
36+ console .log (bankersRounding (0.5 )); // 0
37+ console .log (bankersRounding (1.5 )); // 2
38+ console .log (bankersRounding (1.24 , 1 )); // 1.2
39+ console .log (bankersRounding (1.26 , 1 )); // 1.3
40+ console .log (bankersRounding (1.25 , 1 )); // 1.2
41+ ```
You can’t perform that action at this time.
0 commit comments