2012-05-19 2 views
0

결과가 정수가 될 때까지 a을 반올림하거나 올림합니다.결과가 정수가 될 때까지 수식의 반올림 요소

a = 1.2 
b = 1.5 
a*b*16 = 28.8 

는 그러나, 나는 기준이 있습니다 a없이 3 개 이상의 소수의 장소에 고정해야합니다. 그래서 계산을 필요로하는 곳에이에 위의 예제 것 출력 :

a = 1.25 
b = 1.5 
a*b*16 = 30 

사람이 올바른 방향으로 날 지점 수 있다면는 자바 스크립트를 또는 무엇이든 쓸 수 있는지 실제로, 말대꾸에 뭔가를 코딩 만하고 있습니다. 이 혼란스러운 계산을 공식화하는 데 도움이 필요합니다!

기준 : a 더 이상 3 소수점이 없어야합니다. the result의 정수이어야합니다.

이것도 가능합니까?

+0

을 ==에 "고정"수를 정의? –

+0

소수 자릿수가 없습니다. 정수 : –

+1

1.25와 1.5는 정수가 아닙니다. –

답변

2

사용하는 방법에 관계없이 변수의 정밀도를 제한하면 결과가 정수가 될 것이라고 보장 할 수 없습니다.

예 :

  • 다음 b = 3 a = 30/(16 × 3) = 48분의 30 = 5/8 = 0.625이 경우
    , 0.625 × × 경우 3 16 = 30입니다.

  • 다음 b = 7, 0.268 a에 결과를 반올림 = 30/(16 × 7) = 112분의 30 = 56분의 15 = 0.267857 ...
    a 및 0.268 × × 7 = 30.016 (16)의 경우, 즉, 기준을 만족하는 a 값이없고, 사용자가 할 수있는 최선의 값은 0.268입니다.

하지만 당신은 정수에 가능한 결과가 가깝게 만들 수있는 최고의 값을 해결할 수 있습니다.

원하는 변수에 대한 방정식을 풀고 적절한 소수 자릿수로 반올림합니다.

a = 30./(16. * b); // true value 
a = ((int) (1000 * a + 0.5))/1000; // round to 3 decimals 

대부분의 현대적인 언어는 당신을 위해 라운딩을 할 수있는 라이브러리 기능을 제공; 나는 그것을 "장황한"방식으로 써서 어떻게 작동하는지 이해할 수 있습니다.

+0

음 ...하지만 'a'를 반올림하면 더 이상 계산이 필요하지 않습니다. –

+0

맞습니다. Pls. 업데이트 된 답변보기 –

+0

만약에 ... 나는 소수점 이하 3 자리가 아닌 모든 가능한 변수를 찾은 다음 가장 가까운 결과를 사용하는 루프를 만들었습니까? 그게 내 머리에서 작동 ... 내가 어떻게 코드거야. –

0
i = Math.round(a*b*16); 
a = i/b/16; 
a = a.toFixed(2); 
b = i/16/a; 

테스트 OM 난 * B 형 * 16

관련 문제