1

我正在尝试制作一个点钞机,每次点击时,它都会将你的“钱”数量增加 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,然后无法再次增加数字。

4

1 回答 1

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

于 2019-04-10T03:50:21.080 回答