Подтвердить что ты не робот

Разница между float и int в Javascript?

Я просматриваю код из Google Closure Library, и я нашел эту строку:

var isNegative = number < 0.0 || number == 0.0 && 1 / number < 0.0;

Я понял, что причиной такой изначально странно выглядящей контрольной проверки является идентификация -0 как отрицательной, но есть ли какая-то причина использовать 0.0 вместо 0?

4b9b3361

Ответ 1

(С 2011 года, когда был опубликован этот ответ, многое изменилось - см. Обновления ниже)

Обновление за 2019 год

BigInt появился в V8 (Node.js и браузеры на основе Chromium) с мая 2018 года. Он должен появиться в Firefox 68 - см. Билет SpiderMonkey. Также реализовано в WebKit.

BigDecimal еще не был реализован ни одним движком. Посмотрите на альтернативную библиотеку.

Обновление 2015

Прошло более 4 лет с тех пор, как я написал этот ответ, и сейчас ситуация намного сложнее.

Теперь у нас есть:

Скоро у нас будет:

Это означает, что число числовых типов, доступных в JavaScript, вырастет из одного:

по крайней мере, следующее в WebAssembly:

  • 8-битное целое число (со знаком и без знака)
  • 16-разрядное целое число (со знаком и без знака)
  • 32-разрядное целое число (со знаком и без знака)
  • 64-разрядное целое число (со знаком и без знака)
  • 32-битная с плавающей точкой
  • 64-битная с плавающей точкой

(Технически внутренние представления всех целочисленных типов являются беззнаковыми на самом низком уровне, но разные операторы могут рассматривать их как подписанные или беззнаковые, как, например, int32.sdiv или int32.udiv и т.д.)

Они доступны в типизированных массивах:

  • 8-битные двойки дополняют целое число со знаком
  • 8-битное целое число без знака
  • 8-битное целое число без знака (зажато)
  • 16-битное двойное дополнение со знаком целое число
  • 16-разрядное целое число без знака
  • 32-битные двойки дополняют целое число со знаком
  • 32-разрядное целое число без знака
  • 32-разрядное число с плавающей точкой IEEE
  • 64-разрядное число с плавающей точкой IEEE

asm.js определяет следующие числовые типы:

  • ИНТ
  • подписанный
  • неподписанный
  • intish
  • Fixnum
  • двойной
  • удваивать?
  • поплавок
  • плавать?
  • floatish

Оригинальный ответ 2011 года

В JavaScript есть только один тип чисел - число с плавающей точкой двойной точности IEEE 754.

Посмотрите эти вопросы для некоторых последствий этого факта:

Ответ 2

Хотя в Javascript есть только один тип числа, многие программисты хотели бы показать, что их код работает с числами с плавающей запятой, а также целыми числами. Причина показа десятичной точки для документации.

var isNegative = number < 0 || number == 0 && 1 / number < 0;

Это работает точно так же, как в библиотеке Closure. Но некоторые программисты, читающие код, будут думать, что он работает только с целыми числами.

Приложение: - Недавно я пришел к статье Д. Барановского, которая много критикует библиотеку Google Closure и отмечает, что "ее библиотека JavaScript написана разработчиками Java, которые явно не получают JavaScript". Он указывает больше примеров путаницы этого типа, в color.js https://github.com/google/closure-library/blob/master/closure/goog/color/color.js

https://www.sitepoint.com/google-closure-how-not-to-write-javascript/