В настоящее время я работаю с десятичными точками, но Javascript, кажется, округляет все время.
Например, здесь один из моих расчетов:
(1 + 0,05) ^ (1/12)
Это должно вернуть 1.0040741237836483016054196026721, но все, что я получаю, - это 1.
Я пробовал использовать библиотеку Big.js, но он все еще возвращает мне 1, и мне нужны эти десятичные точки для получения точного результата, есть ли способ указать количество десятичных позиций, которые я хочу?
Символ ^
имеет побитовую семантику XOR в javascript. См. Здесь.
Следующий фрагмент кода показывает, как получить правильный результат:
console.log('(1 + 0.05) ^ (1/12) = ${Math.pow((1 + 0.05), (1/12))}');
Как отмечено в другом ответе, вы можете использовать vanilla JS, но если вам нужно выполнять математические операции с точностью, чем вы можете искать в таких библиотеках, как decimal.js, чтобы поддерживать эту точность.
const vanJS = Math.pow(1 + 0.05, 1/12);
const decJS = Decimal.pow(1 + 0.05, 1/12).toPrecision(20);
console.log({ vanJS, decJS });
<script src="/decimal.min.js"></script>
Вы должны всегда использовать библиотеку Math (MDN), чтобы выполнять вычисления. Вы можете использовать функцию Pow(val, exponential)
в ваших интересах.
Если у вас есть 1/2, вы можете сказать это 2 ^ (-1). Таким образом, вы всегда можете перевести деление на экспоненциальное
У Javascript есть некоторые проблемы с точностью, и вам будет трудно работать с плавающими точками.
var amount = (1 + 0.05) ^ (1/12);
var amountPow = Math.pow(1 + 0.05, Math.pow(12,-1));
console.log((1 + 0.05) ^ (1/12)); // Normal
console.log(amountPow); // Exponential function Math
Math.pow
самом деле работает и с реальными показателями. Итак, ваш второй вызов Math.pow
не является неправильным, но ненужным, поскольку Math.pow(1 + 0.05, 1/12) === Math.pow(1 + 0.05, Math.pow(12, -1))
.