为什么“ toFixed”阻止我的功能多次运行?

时间:2019-04-10 03:32:55

标签: javascript tofixed

我正在尝试制作一个点钞机,每次单击该点,它就会使您的“钱”数增加1美元。但是,我希望货币显示始终显示2个小数位。当我使用toFixed(2)修复此问题时,它使它只能运行一次,直到刷新页面后才能再次运行。

我尝试删除代码的toFixed部分,它正常运行,但是它不显示我希望的小数位数。

let money = 0;
let mpc = 1;
let moneySuffix = "";

function coinClick() {
    money = money + mpc;
    money = money.toFixed(2);

    if (money >= 1000) {
        moneySuffix = " thousand";
    } else if (money >= 1000000) {
        moneySuffix = " million";
    } else if (money >= 1000000000) {
        moneySuffix = " billion";
    } else if (money >= 1000000000000) {
        moneySuffix = " trillion";
    } else if (money >= 1000000000000000) {
        moneySuffix = " quadrillion";
    } else {
        moneySuffix = "";
    }

    document.querySelector("#totalMoney").innerHTML = "$" + money + moneySuffix;
}

我希望它在单击后显示1.00,在单击两次后显示2.00,依此类推。但是,单击后显示1.00,因此不能再次增加数字。

1 个答案:

答案 0 :(得分:3)

方法Number.toFixed()返回一个字符串,因此您正在将一个最初的数字类型转换为字符串,这将导致随后的clicks出错,因为您将尝试执行toFixed()在一个字符串上。如果您试图用两个小数点向用户显示该数字,则仅将方法应用于将向用户显示的代码部分:

let money = 0;
let mpc = 1;
let moneySuffix = "";

function coinClick()
{
    money = money + mpc;

    if (money >= 1000 && money < 1000000) {
        moneySuffix = " thousand";
    } else if (money >= 1000000 && money < 1000000000) {
        moneySuffix = " million";
    } else if (money >= 1000000000 && money < 1000000000000) {
        moneySuffix = " billion";
    } else if (money >= 1000000000000 && money < 1000000000000000) {
        moneySuffix = " trillion";
    } else if (money >= 1000000000000000) {
        moneySuffix = " quadrillion";
    } else {
        moneySuffix = "";
    }

    // Note, we use toFixed() just here, but we don't change the numeric type
    // of the variable money.
    document.querySelector("#totalMoney").innerHTML = "$" + money.toFixed(2) + moneySuffix;
}

请注意,我也对if-else块进行了更改以使其正常工作,此外,请注意存在限制:Number.MAX_SAFE_INTEGER