C#에서 Math.Pow는 거듭제곱(제곱 연산) 을 하는 함수입니다.
|
1 2 3 |
decimal actualAmount = value / (decimal)Math.Pow(10, decPos); |
- value = 65600
- decPos = 2
|
1 2 3 |
|
1 2 3 |
Math.Pow(10, 2) = 100 |
65600 / 100 = 656.00
반환형은 double
그래서 decimal 계산할 때는 반드시 캐스팅 필요:
|
1 2 3 |
(decimal)Math.Pow(10, decPos) |
|
1 2 3 4 5 6 7 8 9 10 |
decimal divisor = 1m; for (int i = 0; i < decPos; i++) { divisor *= 10m; } decimal actualAmount = value / divisor; |
🔬 내부 동작 원리
Math.Pow(10, 3) 은 내부적으로
|
1 2 3 |
10 × 10 × 10 |
을 계산해서 1000 반환
하지만 double 기반 계산이라
|
1 2 3 |
1000.0000000000001 |
같은 미세 오차가 있을 수 있습니다.
Sample
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
if (int.TryParse(BaseDecPos, out int decPos) && decPos >= 0) { decimal divisor = 1m; for (int i = 0; i < decPos; i++) divisor *= 10m; decimal actualAmount = value / divisor; string formatted = actualAmount.ToString("N" + decPos, new CultureInfo("en-US")); doc.XPathSelectElement("//GenQuoteDetails/BaseFareAmt").Value = formatted; } |