toFixed是'Don’不要做任何事

toFixed Isn't Doing Anything

本文关键字:任何事 Don toFixed      更新时间:2023-09-26

我在自学JavaScript,遇到了toFixed()的问题。我正在使用摊销计算器;并且,其中一个步骤返回一个包含大量小数位数的数字。我正试图把它减少到小数点后4位。请注意,示例代码中有很多解释性的HTML。它只是为了让我能够完成等式的各个步骤。此外,当我在很长的数字上加一时,它会在科学记数法的末尾加上数字一。

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);

来自MDN的文档:

如果number大于1e+21,此方法只需调用number.protype.toString()并返回一个指数表示的字符串。

问题是,你使用的是4.5而不是0.045作为利率,所以这样做:

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

给你一个巨大的数字(确切地说是6.151362770461608e+496.15 * 10^49)。把你的利率改成0.045,你就会如愿以偿。

至于var RplusOne = RRaised + 1行,这里的问题是RRaised是一个字符串,因为toFixed。我只会在你展示东西的时候调用toFixed,而不是在其他任何时候;这样做的主要原因是为了避免后续计算中的舍入错误,但还有一个额外的好处,即变量仍然是数字,而不是字符串。