我正在自学JavaScript并遇到了toFixed()的问题。我正在通过一个摊销计算器;并且,其中一个步骤返回一个带有大量小数位的数字。我试图把它减少到4位小数。 请注意,示例代码中包含大量解释性HTML。只有这样我才能完成这个等式的步骤。此外,当我在非常长的数字中添加一个时,它会将数字1添加到科学记数法的末尾。
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);
答案 0 :(得分:3)
如果number大于1e + 21,则此方法只调用Number.prototype.toString()并以指数表示法返回一个字符串。
问题在于您使用4.5
作为利率而不是0.045
,所以这样做:
Math.pow(4.5 / 12 + 1, 360)
为您提供了一个巨大的数字(确切地说是6.151362770461608e+49
或6.15 * 10^49
)。将您的利率更改为0.045
,您将得到您所期望的。
对于var RplusOne = RRaised + 1
行,此处的问题是由于RRaised
toFixed
是一个字符串。我只会在你展示东西时给toFixed
打电话,而不是在任何其他时间;这样做的主要原因是为了避免在后续计算中出现舍入错误,但还有一个额外好处,即变量仍然是数字而不是字符串。