Я прочитал это в W3Schools:

Все числа в JavaScript хранятся как 64-битные (8-байтовые) базы 10, числа с плавающей запятой.

Это звучит довольно странно. Теперь это либо неправильно, либо должна быть веская причина не использовать базу 2, как стандарт IEEE.

Я пытался найти настоящее определение JavaScript, но не смог найти ни одного. Либо в документации по V8, либо в WebKit, двух реализациях JavaScript, которые я мог найти в Википедии, которые казались мне наиболее знакомыми, я мог найти, как они хранят тип JavaScript Number.

Итак, JavaScript использует базу 10? Если так, то почему? Единственная причина, по которой я мог придумать, состояла в том, что, возможно, использование базы 10 имеет преимущество, когда вы хотите иметь возможность точно хранить целые числа, а также числа с плавающей запятой, но я не знаю, как использование базы 10 будет иметь преимущество для этого себя.

5
Steven Roose 26 Янв 2013 в 22:56

3 ответа

Лучший ответ

Это не Консорциум World Wide Web (W3C), это веб-сайт w3schools, который не является авторитетом для каких-либо веб-стандартов.

Числа в Javascript - это числа с плавающей запятой двойной точности, соответствующие стандартам IEEE.

Сайт получил часть о каждом числе - 64-битное число с плавающей запятой. База 10 не имеет ничего общего с числовым представлением, что, вероятно, связано с тем фактом, что числа с плавающей запятой всегда анализируются и форматируются с использованием базы 10.

7
Guffa 26 Янв 2013 в 19:06

Числа в JavaScript соответствуют стандарту ECMA-262 (ECMAScript 5.1) раздел 4.3. 19 :

Примитивные значения, соответствующие значению IEEE 754 64-разрядного двоичного формата двойной точности.

Таким образом, любая реализация, использующая базовые числа 10 с плавающей запятой, не соответствует ECMA-262.

5
Lightness Races in Orbit 26 Янв 2013 в 19:53

JavaScript использует, как и большинство современных языков, IEEE754. Который вообще не хранится в базе 10.

Специфика JavaScript заключается в том, что существует только один тип чисел - это число с плавающей запятой двойной точности. Который имеет побочный эффект, что вы несколько ограничены по сравнению с другими языками, если вы хотите иметь дело с целыми числами: вы не можете хранить любое целое число двойной точности, только те, которые соответствуют размеру дроби (52 бита).

4
Denys Séguret 26 Янв 2013 в 19:07