Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Какой лучший способ проверки целого? (https://javascript.ru/forum/misc/81891-kakojj-luchshijj-sposob-proverki-celogo.html)

jaroslav.tavgen 10.02.2021 17:14

Какой лучший способ проверки целого?
 
Как лучше всего решается известная проблема "0.1 * 0.2" ?

alert(0.1 * 0.2)


Здесь предлагают такое:

function strip(number) {
    return (parseFloat(number).toPrecision(12));
}

Является ли это решение оптимальным? Почему? Спасибо!

рони 10.02.2021 17:40

jaroslav.tavgen,
alert((1 * 2) / (10 * 10))

jaroslav.tavgen 18.04.2021 15:13

Цитата:

Сообщение от рони (Сообщение 533701)
jaroslav.tavgen,
alert((1 * 2) / (10 * 10))

Не понял смысл этого ответа

(0.1*0.2)/(10*10) // 0.00020000000000000004

рони 18.04.2021 15:39

Цитата:

Сообщение от jaroslav.tavgen
Не понял смысл этого ответа

что мешает использовать целые числа, если нужна особая точность?

jaroslav.tavgen 18.04.2021 15:54

Цитата:

Сообщение от рони (Сообщение 535628)
что мешает использовать целые числа, если нужна особая точность?

Я сейчас выясняю этот вопрос, как это вообще лучше всего делать. Там же тоже не всё так просто: когда ты начинаешь делить целые числа или извлекать из них корень, тоже возникают дроби, и надо понимать, как это правильно использовать. Как запятые расставлять, что использовать: floor, ceiling или round, и т.д.

рони 18.04.2021 16:01

умножение чисел
 
jaroslav.tavgen,
const multiply = (a, b) => {
    let n = 1;
    while (a != Math.trunc(a)) {
        a *= 10;
        n *= 10;
    }
    while (b != Math.trunc(b)) {
        b *= 10;
        n *= 10;
    }
    return a * b / n
}
alert(multiply(.1, .2));

jaroslav.tavgen 18.04.2021 16:17

рони,
const multiply = (a, b) => {
    let n = 1;
    while (a != Math.trunc(a)) {
        a *= 10;
        n *= 10;
    }
    while (b != Math.trunc(b)) {
        b *= 10;
        n *= 10;
    }
    return a * b / n
}
alert(multiply(-8.87, -8.87));

рони 18.04.2021 17:19

jaroslav.tavgen,
:)
const multiply = (...arg) => {
    let n = 1;
    return arg.reduce((a, b) => {
        b = b.toString().split('.');
        if (b[1]) n *= Math.pow(10, b[1].length);
        return a *= b.join('');

    }, 1) / n
}
alert(multiply(-8.87, -8.87));
alert(multiply(-8.87, -8.87, -8.87, -8.87));


Часовой пояс GMT +3, время: 03:34.