설명서에 따르면이 decimal.Round
방법은 대부분의 응용 프로그램에서 일반적이지 않은 반올림 알고리즘을 사용합니다. 그래서 나는 항상 더 자연스러운 반반 알고리즘을 수행하기 위해 사용자 정의 함수를 작성합니다.
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
아무도이 프레임 워크 디자인 결정의 이유를 알고 있습니까?
프레임 워크에 반 반올림 알고리즘을 구현 한 것이 있습니까? 아니면 관리되지 않는 Windows API일까요?
단순히 decimal.Round(2.5m, 0)
3을 결과로 쓰지만 대신 2를 얻는 초보자에게는 오해의 소지가 있습니다 .