В JavaScript по умолчанию есть один тип чисел — Number. Хотя он конечно делится на Int и Float, хотя выражается это в немногом (например, в функциях parseInt — parseFloat).
При этом большие числа (и Int и Float) укорачиваются, а дроби приводятся к десятичным и округляются. И то и другое не всегда хорошо, так что появились библиотеки, которые предлагают новые классы для необычных чисел.
BigInt
Числа (и Int и Float) укорачиваются до 15 символов. При этом в Int остальные цифры хранятся в качестве нулей. Пример:
>> 100000000000000000111
100000000000000000000
Библиотека называется BigNumber, числа нужно передавать в форме строки. Используем:
var num = new BigNumber('100000000000000000001');
num.add(1); // 100000000000000000002
Остальное на странице библиотеки, есть большинство нужных функций (+-*/), принимают числа, строки и те же BigNumber.
BigFloat
Также есть Float, там тоже 15 символов, но при этом лишние цифры просто выбрасываются.
>> 3.14159265358979323
3.141592653589793
Можно использовать ту же библиотеку, в том же формате:
var pi = new BigNumber('3.14159265358979323');
pi.add('0.00000000000000003'); // 3.14159265358979326
Fraction
Третий тип — это дроби. Число округляется. И из-за этого результат может испортиться.
>> 1/3
0.3333333333333333
>> 1/3 + 2/3
1
>> 0.3333333333333333 + 0.6666666666666666
1
И у нас есть библиотека Fraction.js.
var a = new Fraction(1,3);
a.add( new Fraction(2,3) ); // 1
new Fraction('2/3');
На этом всё
Спасибо за внимание
Автор: Keyten