Почему console.log не отображает значение с плавающей запятой IEEE-754 для назначенного var?
Я знаю, что значения с плавающей запятой в JavaScript хранятся в двоичном формате base-2, указанном в IEEE 754. Для меня это означает, что, когда я присваиваю значение литерала .1
переменной, фактическое значение будет равно 0.100000001490116119384765625 (или некоторые высокоточное число вроде этого - моя математика может быть неправильной).
Но в console.log
от этого предположения, console.log
хранимой ценности не отражает этого. Следующий код: var a = 0.1; console.log(a);
var a = 0.1; console.log(a);
... когда выполняется в Chrome и, возможно, в других браузерах, будет выводиться: 0.1
Я бы ожидал, что это будет: 0.100000001490116119384765625
Значит ли значение a
в этой точке 0.1
или 0.1000000...
? Если последнее, то каким способом console.log()
показывает 0.1
? Меня интересует, что происходит здесь под капотом. (Например, JS хранит текстовое представление числа в переменной?)
Для вас, добросовестных администраторов, которые могут быть немного быстрыми, чтобы "отметить как дублирующиеся", обратите внимание, что я задаю противоположность более распространенным вопросам и вариантам "Почему я вдруг вижу эти дурацкие высокоточные номера?"
Этот вопрос является дубликатом, за исключением того, что использует console.log
, который находится вне JavaScript. Стандарт JavaScript, спецификация языка ECMAScript 2017 не упоминается в console
. Эта функция предоставляется поставщиками в качестве расширения. Поэтому каждый поставщик может реализовать свое поведение. Однако несколько вероятно, что использование console.log
с Number
будет использовать обычное поведение ToString
, в результате чего объяснение преобразования объясняется в ответе, указанном выше.
Вы правы! Никогда я этого не замечал и не могу объяснить. Может быть, некоторые разные. Я предполагаю, что это просто не показано, потому что это будет раздражать многих людей, и для большинства вещей это не проблема.
var a = 0.1;
console.log(a.toPrecision(21))
- Вопросы
- Javascript
- Почему console.log не отображает значение с плавающей запятой IEEE-754 для назначенного var?