Skip to content

Commit 6234f53

Browse files
committed
update README
1 parent 957ff98 commit 6234f53

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,3 +739,49 @@ console.log(calcLCM(103, 27)); // 2781
739739
console.log(calcLCM(21, 15, 18)); // 630
740740
console.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

Comments
 (0)