Как мы знаем, у Javascript есть некоторые проблемы (или особенности) с вычислением десятичных чисел. Например:
console.log(0.1 + 0.2) // 0.30000000000000004
И мы знаем, что этого можно избежать, используя разные библиотеки (например, я использую bignumber.js ), и теперь у нас есть то, что ожидалось:
console.log(Number(new BigNumber(0.1).plus(0.2))); // 0.3
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
НО
Bignumber.js имеет ограничения:
Он принимает значение типа номер (только до 15 значащих цифр), строку или объект BigNumber.
Мы можем передать строку (это возможно), но таким образом мы можем потерять несколько цифр с конца:
console.log(Number(new BigNumber(0.1).plus("198.43092534959501"))); // 198.530925349595, not 198.53092534959501
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
Сейчас я работаю с криптовалютами и часто имею дело с числами типа 198.43092534959501
, и в этом случае я получаю ошибку (как и ожидалось):
console.log(Number(new BigNumber(0.1).plus(198.43092534959501))); // error
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
Я знаю, что некоторые люди используют дополнительные множители, но в приведенном выше случае это не сработает. Если вы имеете дело с криптовалютами, вы знаете, что на самом деле мы работаем с не умноженными и умноженными значениями (например, 489964999999000000
и 0.489964999999
). Но моя цель на данный момент - суммировать все остатки фиатных денег для разных валют, но у них разные множители, поэтому я не могу просто суммировать не умноженные значения, и, похоже, мне нужно как-то суммировать умноженные значения.
Это была небольшая предыстория, но мой общий вопрос:
Как суммировать / умножать / и т. Д. десятичные числа, в которых больше 15 цифр?
0.1
- это не десятичное число, а тип данных с плавающей запятой. И эти типы данных с плавающей запятой не подходят для десятичных вычислений, потому что они служат другой цели. И это касается не только JS, но и любого другого языка. - person t.niese   schedule 03.04.2018