2013-10-16 1 views
0

정수 유형을 사용하는 경우에만 쉽게 반올림을 수행하는 방법을 찾으려고 시도했습니다. 이 작업을 수행하는 아래integer arithemetic rounding

Value1=76 
Value2=305 

Tmp1=(10 * Value1)/Value2 = 2,49 = 2 (integer) 
Tmp1=(Tmp1 + 5)/10 = (2 + 5)/10 = 0.7 = 0 (integer) 

있는가 반올림 더 나은 방법 - -

Value1=260 
Value2=305 

Tmp1=(10 * Value1)/Value2 = 8.52 = 8 (integer) 
Tmp1=(Tmp1 + 5)/10 = (8 + 5)/10 = 1.3 = 1 (integer) 

예 2를 반올림

예 1 : 다음과 같은 솔루션을 발견하셨습니까?

같은 문제가있는 다른 사용자에게 도움이 될지도 모릅니다.

답변

0

어떤 프로그래밍 언어를 사용합니까? 일반적으로 그 작업을 수행하는 라운드 함수가 있습니다. 자바 예 :

//.00 added to get 2 decimals 
double Value1=260.00; 
double Value2=305.00; 

int Tmp1,Tmp2; 

//To round from 5,1 to 5: 

Tmp1 = (int) Math.floor(Value1/Value2); 

//To ceil from 5,1 to 6: 

Tmp1 = (int) Math.ceil(Value1/Value2); 
+0

ansi c - 임베디드 CPU에서 실행 - 전혀 부동 소수점 유닛. 대부분의 경우에 당신이 코드에 완전한 라이브러리를 추가해야 할 경우처럼, 나는 c 라이브러리의 사용을 피하려고합니다. 하나 또는 두 개의 기능 만 사용하려고합니다. –

0

희망이 도움이 :

int round(float myValue) { [Test Values: 0.51, 0.49, 2.7, 3.3] 
int rounded=myValue*2 [1,0,5,6] 
int toAdd=myValue % 2 [1,0,1,0] 
rounded=rounded/2  [0,0,2,3] 
rounded=rounded+toAdd [1,0,3,3] 
return rounded 
} 
0

가정 숫자는 두 가지 조건 중 하나에 해당하는 경우 일들이 쉽게, 부호없는 숫자이고, 라운드 업 - 온 - 절반은 행동이 요구되는 가정 . 제수가 2의 배수로 알려져 있으면 간단히 (n/(d/2) +1)/2를 계산하면됩니다. 약수가 2의 배수는 아니지만 배당량이 너무 크지 않은 것으로 알려진 경우 ((2 * n/d + 1)/2)를 계산합니다. 두 조건 중 어느 것도 적용되지 않으면 더 많은 항목을 개별적으로 처리해야합니다 경우.