Я только что заметил, что функция parseInt
не заботится о десятичных дробях в случае целых чисел (чисел, содержащих символ e
).
Возьмем пример: -3.67394039744206e-15
> parseInt(-3.67394039744206e-15)
-3
> -3.67394039744206e-15.toFixed(19)
-3.6739e-15
> -3.67394039744206e-15.toFixed(2)
-0
> Math.round(-3.67394039744206e-15)
0
Я ожидал, что parseInt
также вернет 0
. Что происходит на нижнем уровне? Почему parseInt
возвращает 3
в этом случае (некоторые фрагменты исходного кода будут оценены)?
В этом примере я использую node v0.12.1
, но я ожидаю, что то же самое произойдет в браузере и других движках JavaScript.
-3.67394039744206e-15.toFixed(19)
делает?(-3.67394039744206e-15).toFixed(19)
возвращает другой результат. - person mpen   schedule 11.05.2015-3.67394039744206e-15.toFixed(19)
совпадает с-((3.67394039744206e-15).toFixed(19))
, а-
(как и+
) неявно преобразует его в число (это как сокращение дляNumber()
, например,+'14'
равно14
, а-'14'
равно-14
). - person Sebastian Simon   schedule 11.05.2015obj.a-obj.b
приведет кReferenceError: a is not defined
или что-то в этом роде… - person Sebastian Simon   schedule 11.05.2015parseInt(-3.67394039744206e-15) === -3
? - person Salman A   schedule 11.05.2015