- PVSM.RU - https://www.pvsm.ru -

Три нестандартных типа чисел в JavaScript и две библиотеки

В JavaScript по умолчанию есть один тип чисел — Number. Хотя он конечно делится на Int и Float, хотя выражается это в немногом (например, в функциях parseInt — parseFloat).
При этом большие числа (и Int и Float) укорачиваются, а дроби приводятся к десятичным и округляются. И то и другое не всегда хорошо, так что появились библиотеки, которые предлагают новые классы для необычных чисел.

BigInt

Числа (и Int и Float) укорачиваются до 15 символов. При этом в Int остальные цифры хранятся в качестве нулей. Пример:

>> 100000000000000000111
  100000000000000000000

Библиотека называется BigNumber [1], числа нужно передавать в форме строки. Используем:

var num = new BigNumber('100000000000000000001');
num.add(1); // 100000000000000000002

Остальное на странице библиотеки [1], есть большинство нужных функций (+-*/), принимают числа, строки и те же 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 [2].

var a = new Fraction(1,3);
a.add( new Fraction(2,3) ); // 1

new Fraction('2/3');

На этом всё

Спасибо за внимание

Автор: Keyten


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/10758

Ссылки в тексте:

[1] BigNumber: http://jsfromhell.com/classes/bignumber

[2] Fraction.js: http://github.com/ekg/fraction.js