2014-09-05 4 views
0

나는 JavaScript를 가르치고 있고 toFixed()와 관련된 문제가있다. 저는 할부 상환 계산기를 사용하고 있습니다. 그리고 그 중 하나의 단계는 소수 자리가 많은 숫자를 반환합니다. 나는 그것을 소수점 이하 4 자리까지 줄이려고 노력하고있다. 샘플 코드에 많은 설명 HTML이 있음을 알립니다. 방정식의 단계를 통해 작업 할 수있는 것은 단지 그곳에 있습니다. 또한 매우 긴 숫자에 하나를 더하면 과학 표기법의 끝 부분에 숫자 1이 추가됩니다. MDN's documentation에서toFixed 아무 것도하지 않는다

var paymentamount; 
var principal=250000; 
var interestrate = 4.5; 
var annualrate = interestrate/12; 
var numberofpayments = 360; 
document.write("This is the annuitized interest rate: "+ annualrate +"%"); 
document.write("<h3> Now we add 1 to the annualized interest rate</h3>"); 
var RplusOne = annualrate + 1; 
document.write("<p> This is One Added to R: " + RplusOne + "%"); 
document.write("<h3>Next RplusOne is Raised to the power of N </h3>"); 
var RRaised = (Math.pow(RplusOne, numberofpayments)).toFixed(4); 
document.write("<p>This gives us the following very long number, even thought it shouldn't: " + RRaised); 
document.write("<h3>Now we add one to the very long number </h3>"); 
var RplusOne = RRaised + 1; 
document.write("<p>Now we've added one: " + RplusOne); 
+1

'.toFixed()'함수는 숫자가 아닌 ** 문자열 **을 반환합니다. – Pointy

답변

3

:

수보다 큰 1E + 21 인 경우,이 메소드는 Number.prototype.toString()를 호출하고 지수 표기법으로 문자열을 반환합니다.

문제

는 대신 0.045의 이자율로 4.5를 사용하여, 그래서이 일을하는 것입니다 :

Math.pow(4.5/12 + 1, 360) 

당신에게 엄청난 수 (6.151362770461608e+49 또는 6.15 * 10^49 정확한 예정) 제공합니다. 이자율을 0.045으로 변경하면 기대하는 바를 얻을 수 있습니다.

var RplusOne = RRaised + 1 줄의 경우 때문에 RRaised은 문자열입니다. 나는 toFixed으로 전화 할 때 다른 것을 표시 할 때가 아닙니다. 주된 이유는 후속 계산에서 반올림 오류를 방지하는 것이지만 변수가 숫자가 아닌 문자열로 유지된다는 이점이 있습니다.

+0

감사합니다. 그건 내 멍청한 수학 오류 였어. 450 %의 비율은 꽤 높습니다. – user3483571

+0

'RRaised'는 여전히'toFixed'의 리턴 타입 때문에 문자열이 될 것이기 때문에,'+ 1'은 여전히 ​​산술을 수행하는 대신에'1' 문자를 덧붙일 것입니다. – ajp15243

+0

마지막 행의 다음 행을'var RplusOne = RRaised * 1 + 1;'로 변경할 수 있습니다. 숫자로 RRaised가 입력됩니다. –

관련 문제