Почему «toFixed» не позволяет моей функции запускаться несколько раз? - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь сделать счетчик денег, где каждый раз, когда вы нажимаете, он увеличивает вашу сумму «денег» на 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 Ответ

3 голосов
/ 10 апреля 2019

Метод 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

...