Почему JS опускает число, когда parseFloat используется с 15 знаками после запятой? - PullRequest
0 голосов
/ 18 октября 2018

Я попытался разобрать строку для всплытия, имеющую 15 десятичных знаков и 14 десятичных знаков.Ниже приведен вывод консоли

parseFloat('99.000000000000001')
//99
parseFloat('99.00000000000001')
//99.00000000000001

Почему удаление одного десятичного знака делает эту разницу?

1 Ответ

0 голосов
/ 18 октября 2018

Ну, есть немного ограничений на то, какие числа Javascript может обрабатывать (пока мы не получим BigInt64 или если вы используете библиотеку, подобную decimal.js ).Так как он не может обрабатывать больше десятичных знаков, он просто усекается в точке.Если вы сделаете большее число, вы увидите меньше десятичных знаков.Если это приводит к тому, что число «точно» равно 99, в вашем случае javascript будет правильно отображать его как 99, а не 99.00000000000, поскольку у нас есть только число, а не число с плавающей запятой, десятичное число, целое и т. Д.

parseFloat(1234567.123456789);
// 1234567.123456789
parseFloat(12345678.123456789);
// 12345678.12345679
parseFloat(123456789.123456789);
// 123456789.12345679
parseFloat(1234567891.123456789);
// 1234567891.1234567
parseFloat(12345678912.123456789);
// 12345678912.123457
parseFloat(123456789123.123456789);
// 123456789123.12346

Править: на самом деле оно кажется округлым, а не опускающимся.

Надеюсь, это все объясняет.

...