Можете ли вы использовать тип ввода "число" для десятичной дроби произвольной точности? - PullRequest
1 голос
/ 08 февраля 2020

Я хотел бы иметь возможность обрабатывать числа от e-18 (0,000000000000000001) до e4 (10000) и выполнять арифметику c на этих входах без ошибок округления. Поэтому я не могу использовать 64-битное число с двойной точностью, присущее JavaScript, так как он имеет безопасный диапазон 9e15, и мне нужен диапазон 1e22.

Могу ли я использовать HTML тип ввода number для этого в сочетании с соответствующим JavaScript, или я должен вместо этого использовать text?

Некоторые примеры кода и npm библиотеки, которые помогут мне решить эту проблему, будут весьма признательны.

1 Ответ

2 голосов
/ 08 февраля 2020

1) Элементы ввода HTML всегда возвращают строковое представление введенного значения .

2) Для безопасной обработки больших чисел вы можете использовать ES6 BigInt или, если вам нужна полная кросс-браузерная поддержка, вы можете использовать такую ​​библиотеку, как big. js, bignumber. js или десятичный. js, в зависимости от ваших потребностей.

3) Возможно, вы также захотите взять посмотрите на свойство valueAsNumber элемента ввода HTML (тип = число). Остерегайтесь проблем с поддержкой для этого.

Итог: вы всегда получите значение, введенное в поле ввода, как тип данных String через свойство value , и вам придется анализировать его либо самостоятельно, либо с помощью библиотеки JS, как указано выше.


Полезные ссылки о числах и работе с ними в JavaScript:

...