Skip to content

Commit ab292d4

Browse files
committed
update Candy-025
1 parent f6a4227 commit ab292d4

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

Candy-025/README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
```

0 commit comments

Comments
 (0)