[c#] C #에서 가장 가까운 정수로 반올림하는 방법

값을 가장 가까운 정수로 반올림하려면 어떻게해야합니까?

예를 들면 :

1.1 => 1
1.5 => 2
1.9 => 2

“Math.Ceiling ()”은 나를 돕지 않습니다. 어떤 아이디어?



답변

자세한 내용은 공식 문서 를 참조하십시오 . 예를 들면 :

기본적으로 Math.Round메서드에 세 개의 매개 변수 를 제공합니다 .

  1. 반올림 할 값입니다.
  2. 값 뒤에 유지하려는 소수 자릿수입니다.
  3. AwayFromZero 반올림을 사용하기 위해 호출 할 수있는 선택적 매개 변수입니다. ( 반올림이 모호하지 않으면 무시됩니다 ( 예 : 1.5 ))

샘플 코드 :

var roundedA = Math.Round(1.1, 0); // Output: 1
var roundedB = Math.Round(1.5, 0, MidpointRounding.AwayFromZero); // Output: 2
var roundedC = Math.Round(1.9, 0); // Output: 2
var roundedD = Math.Round(2.5, 0); // Output: 2
var roundedE = Math.Round(2.5, 0, MidpointRounding.AwayFromZero); // Output: 3
var roundedF = Math.Round(3.49, 0, MidpointRounding.AwayFromZero); // Output: 3

라이브 데모

당신은 필요 MidpointRounding.AwayFromZero당신은 0.5 값을 반올림하려면. 불행히도 이것은의 기본 동작이 아닙니다 Math.Round(). 사용하는 경우 MidpointRounding.ToEven(기본값) 값이 가장 가까운 반올림됩니다 수 ( 1.5로 반올림됩니다 2,하지만 2.5또한 반올림됩니다 2).


답변

Math.Ceiling

항상 반올림합니다 (천장쪽으로)

Math.Floor

항상 내림합니다 (바닥으로)

당신이 추구하는 것은 단순히

Math.Round

이 게시물에 따라 반올림


답변

당신은 필요 Math.Round하지 않습니다 Math.Ceiling. Ceiling항상 “올림” Round하고 소수점 뒤의 값에 따라 올림 또는 내림합니다.


답변

이 설명서가 있고 약간 귀여운 방법도 있습니다.

double d1 = 1.1;
double d2 = 1.5;
double d3 = 1.9;

int i1 = (int)(d1 + 0.5);
int i2 = (int)(d2 + 0.5);
int i3 = (int)(d3 + 0.5);

숫자에 0.5를 더하고 int (또는 floor it)로 캐스팅하면 수학적으로 올바르게 반올림됩니다.


답변

다른 사람들이 제안한대로 (권장) Math.Round를 사용하거나, 0.5를 추가하고 int에 캐스트 (소수 부분이 삭제됨) 할 수 있습니다.

double value = 1.1;
int roundedValue = (int)(value + 0.5); // equals 1

double value2 = 1.5;
int roundedValue2 = (int)(value2 + 0.5); // equals 2


답변

알림입니다. 두 배를 조심하십시오.

Math.Round(0.3 / 0.2 ) result in 1, because in double 0.3 / 0.2 = 1.49999999
Math.Round( 1.5 ) = 2


답변

원하는 것을 정확하게 수행하는 Math.Round 함수가 있습니다.

Math.Round(1.1) results with 1
Math.Round(1.8) will result with 2.... and so one.