56. decimal 내부 표현과 double 차이(재화·정산 정확성)
난이도 중 해설 보기 →
결함을 모두 찾고 원인·수정안·더 나은 설계를 제시하라. 마커
(A)(B) 는 주목 위치 힌트다.
결함 코드 · C#
// 주제: decimal 의 내부 표현과 double 과의 차이 (재화·정산 계산의 정확성)
//
// 아래 프로그램의 출력을 예측하고, decimal 과 double 의 내부 표현 차이로 설명하라.
// 특히 다음을 논하라:
// - decimal 은 어떻게 10진 소수를 오차 없이 표현하는가(96비트 정수 계수 + 스케일).
// - double(IEEE-754 2진 부동소수점)이 0.1 같은 값을 왜 정확히 표현 못 하는가.
// - decimal 이 후행 0(스케일)을 어떻게 보존하며, 상등 비교와 ToString 이 어떻게 다른가.
// - Math.Round 의 기본 라운딩 모드(MidpointRounding)는 무엇인가.
//
// 과제:
// 1) 표준 출력을 한 줄씩 예측하라.
// 2) 게임 재화/결제 금액에 double 대신 decimal 을 써야 하는 이유를 설명하라.
// 3) decimal 의 한계(성능, 범위, 나눗셈의 반올림)도 논하라.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(0.1m + 0.2m == 0.3m);
Console.WriteLine(0.1 + 0.2 == 0.3);
Console.WriteLine((1.10m).ToString());
Console.WriteLine(1.1m == 1.10m);
Console.WriteLine(Math.Round(2.5m));
Console.WriteLine(Math.Round(2.5m, MidpointRounding.AwayFromZero));
Console.WriteLine(Math.Round(3.5m));
}
} 내 리뷰 · C#
내 답안 · 자동 저장
작성 후 위 해설 보기에서 모범 해설과 대조하세요.