@@ -739,3 +739,49 @@ console.log(calcLCM(103, 27)); // 2781
739739console .log (calcLCM (21 , 15 , 18 )); // 630
740740console .log (calcLCM (104 , 96 , 36 , 88 )); // 41184
741741```
742+
743+ # 編號:CANDY-025
744+
745+ ### 程式語言:JavaScript
746+
747+ ### 題目:
748+
749+ ```
750+ 一般我們常見的四捨五入計算方式在統計上容易造成計算偏差
751+ 於是有人推出了「銀行家捨入法」用來稍微平衡計算偏差
752+ 計算方式是「四捨六入五成雙」
753+ 當捨入計算位數剛好是 5 的時候,會算出離這個數字比較近的偶數
754+ ```
755+
756+ ``` js
757+ function bankersRounding (num , digits = 0 ) {
758+ const factor = 10 ** digits;
759+ const shiftedNum = num * factor;
760+ const integerPart = Math .floor (shiftedNum);
761+ const decimalPart = shiftedNum - integerPart;
762+
763+ if (decimalPart > 0.5 ) {
764+ return Math .ceil (shiftedNum) / factor;
765+ } else if (decimalPart < 0.5 ) {
766+ return Math .floor (shiftedNum) / factor;
767+ } else {
768+ const isEven = integerPart % 2 === 0 ;
769+ return (isEven ? integerPart : integerPart + 1 ) / factor;
770+ }
771+ }
772+ // 設定 factor用來移動小數點
773+ // 設定 shiftedNum 用來移動小數點後的數值
774+ // integerPart 為取整數部分
775+ // decimalPart 為取小數部分
776+ // 計算四捨六入
777+ // 當小數剛好為 0.5
778+ // 判斷整數部分是奇數還是偶數
779+
780+ console .log (bankersRounding (0.4 )); // 0
781+ console .log (bankersRounding (0.6 )); // 1
782+ console .log (bankersRounding (0.5 )); // 0
783+ console .log (bankersRounding (1.5 )); // 2
784+ console .log (bankersRounding (1.24 , 1 )); // 1.2
785+ console .log (bankersRounding (1.26 , 1 )); // 1.3
786+ console .log (bankersRounding (1.25 , 1 )); // 1.2
787+ ```
0 commit comments