- 1
if (i.toString().indexOf('.') == -1) { ... }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
if (i.toString().indexOf('.') == -1) { ... }
Ещё один способ проверить, целое ли число.
(i===i|0) толстая баба пытается загнать тощего мужика в койку (вид в замочную скважину)
P.S. нужно больше скобок, чем указано: ((i|0)===i)
Насколько больше? Какой от этого толк?
i="2";//выдаст на строке true
Полагаю неявных конвертаций типов нужно избегать. Потому я поставил ===, а не == (а именно они приводят тип неявно)
Насколько больше каких-нибудь значений, чем чисел :)
Позволяет меньше думать, писать меньше кода.
> Полагаю неявных конвертаций типов нужно избегать.
Нужно, но иногда хочется конвертнуть...
(i-(i|0)==0) тоже вернет false.
http://ideone.com/EyxNpH
> 2147483648 уже не целое? :)
Нет конечно.
> Нет конечно.
Отсюда поподробней :)
Вариант bormandа точно говорит - true.
>9007199254740991
Понимающий суть вопроса человек написал бы ± ((1<<53)-1).
Всем сразу понятно откуда лезет эта мантисса.
>23233333333333333
>на счет него точно сказать нельзя
Насчёт него можно точно сказать что оно целое (как число), однако оно не влазит ни в тип js "целое", и не влазит в тип js Float64.
Но ведь ты так смешно реагируешь :)
4294967296>>1
http://ideone.com/5wssK7
var a= 2.e+22;
System.out.println(a % 1 == 0) //true
var a= "233"
System.out.println(a % 1 == 0) //true
Фейл.
var a=3.14*Math.pow(2,65)+0.5;
System.out.println(a % 1 == 0);
Фейл.
Получается true,false - целые числа, так?
>>на счет него точно сказать нельзя
Верно я понимаю?
Кстати что там спецификация говорит по этому поводу?
Вопрос был такой:
То есть получается true,false - полноправные целые числа, а вот насчёт 23233333333333333 "на счет него точно сказать нельзя"?
То что true, false приводятся к числу не делает их числами.
Для проверки является объекта есть оператор typeof. Возможно ту часть спецификации, которая его описывает на русский еще не перевели.
Но typeof false == "boolean".
А typeof 1 == "number".
А number в переводе с английского это число, false не может быть целым числом, поскольку в оригинале спецификации поясняется что это вовсе не число.
isNaN('foo'); // => true
Ладно. Я беру число из безопасного диапазона и проверяю его "успешным" методом
9007199254740000.5%1==0
Получается 9007199254740000.5 - целое? Верно?
Подтекает абстракция, подтекает.
console.log(9007199254740000.5); // => 9007199254740000
Проверка не работает. Невозможно установить дробное число или нет. Фейл.
>В выражении "безопасные целые" никакое слово не смущает? :)
А насчёт безопасных плавающих там ничего не написано?
То как-то непонятно:
3007199254740000.1 % 1 == 0 //целое
3007199254740000.5 % 1 == 0.5//плавающее
> Проверка не работает. Невозможно установить дробное число или нет.
А оно именно целое, спасибо представлению чисел в js, повторюсь:
console.log(9007199254740000.5); // => 9007199254740000
console.log(3007199254740000.1); // => 3007199254740000
console.log(3007199254740000.5); // => 3007199254740000.5
Так что фэйл твой.
>console.log(9007199254740000.5); // => 9007199254740000
>console.log(3007199254740000.1); // => 3007199254740000
У вас флоат-абасракция потекла прямо по штанине.
Что в стандарте-то написано или не перевели еще?
Что нам скажет console.log?
[] - какое это число? А по сабжу массив а со всяким мусором внутри тоже получается целое число?
Ты так и не ответил, целое ли число -1, ведь побитовый сдвиг >>> с ним не работает.
>[] == 0
Равно потерял [] === 0 //false
Это ваши привидения сугубо нематериальная субстанция.
Я когда был маленький, то боялся привидений, а сейчас особенно боюсь всяких подозрительных приведений типов...
>Не можешь смириться с логикой
С логикой что Логический тип boolean является Целочисленным типом int32? Или что массив с мусором является Целочисленным типом?
Зачем знать, как массив преобразуется в число? (Исключая случай, когда нужно кого-то потроллить в интернетах) Это когда-нибудь нужно в нормальной ситуации?
Отвечаю. Число -1 целое, поскольку представимо целым типом данных.
>ведь побитовый сдвиг >>> с ним не работает.
Редчайшую ахинею порет Мастер ЖС.
Побитовый сдвиг работает:
http://ideone.com/MSfk2X
Точно так же, как и прочие побитовые операции с целыми, не входящими в int32. Противоречия не находишь? :)
В ваших рассуждениях - постоянно.
Да ладно? Укажите хоть на одно.
> почему в множестве "безопасные целые js" не работает операция побитового сдвига, очевидно и естественно применимая к целым числам
2147483648 >> 0 // => -2147483648
> Побитовый сдвиг работает
-1 >>> 0 // => 4294967295
>-1 >>> 0
Это фальшивый сдвиг. И хвалёное неявное приведение типов. Их бинарные представления в int32 идентичны.
Берем число, которое не влазит в int32 в левую руку 8000000000:
Бинарное представление:
0b111011100110101100101000000000000
Должны получить бинарное представление:
0b11101110011010110010100000000000
Сдвигаем левой рукой его вправо и получаем:
1852516352
Бинарное представление:
0b1101110011010110010100000000000
Пропала верхняя 1.
Бля... Убедил. В JS есть честные инты - int32, все целые, что в этот диапазон не входят - не имеют права называться целыми. Оператор >> - честный побитовый сдвиг, а >>> - фальшивый, потому как работает с uint32, а его в js нет. Числа в памяти должны представляться с той же точностью, что используется в литерале. Использующие неявное приведение типов должны гореть на кострах инквизиции, потому как кое-кто его не понимает. А еще у оператора | приоритет выше, чем у ===.
За сим откланиваюсь.
Фальшивый в том смысле что это сдвиг на 0 бит.
http://ideone.com/pJYdpi
>В JS есть честные инты - int32, все целые, что в этот диапазон не входят - не имеют права называться целыми.
Поскольку тогда они представимы не целым типом, а плавающим.
Плавающий тип не может называться целым, поэтому мы и наблюдаем как плывет абасракция.
Память компьютера ограничена техническими факторами, потому вместо понятия целое число (бесконечное множество) используется понятие "целый тип".
Объясняю. В js целым типом является int32, всё что выше неявно сконвертировано в тип float64.
Int - сокращение от integer, в переводе это значит "целое".
У меня язык не поворачивается назвать Float целым. И строку целым числом я назвать не могу.
Тип Number Числовой тип имеет ровно 18437736874454810627 (то есть, 264−253+3) значений, представляющих собой 64-битовые значения с удвоенной точностью в формате IEEE 754 в соответствии со Стандартом IEEE для двоичной арифметики с плавающей точкой
Ну да, 2147483648 точно не целое :D
Числа представимы и типом String, это не делает тип String целочисленным.
Про спеку на русском языке - о тебе же, глупеньком, беспокоюсь.
Да, с твоей позиции в js вообще нет целых чисел, потому как int32 / uint32 в js отсутствуют, просто некоторые операторы работают с его числами как с int'ами :)
Обосрался - притворись что проявил заботу.
>Да, с твоей позиции в js вообще нет целых чисел, потому как int32 / uint32 в js отсутствуют
Не надо ложить мне в рот слова. Я такого не писал.
Рекомендую научиться читать, и осмысливать прочитанное, прежде чем вступать в спор:
>> В js целым типом является int32, всё что выше неявно сконвертировано в тип float64.
Как грубо :) Нечем возразить - начинай хамить.
> Не надо ложить мне в рот слова. Я такого не писал.
Да ладно, будто под словами, что 2^31 не целое подразумивалось нечто иное :)
"123"+4="1234"
4+"123"="4127"
Что я делаю не так?
>23233333333333333
>>на счет него точно сказать нельзя
Ну да :)))))
А вот авторы Lua без зазрения совести выпилили из языка все числовые типы кроме Float и смело индексируют массивы ("таблицы") числами с плавающей точкой.
Мне это тоже мозг выносит. Зато холиваров подобных нет.
О массивы(мапы?) в жс, это что-то:
a[7.01]=1
console.log(a[7.01])=1
console.log(a)=[]
> console.log(a)=[]
А надо, чтоб как в Lua работало?
Честно, не знаю как лучше. И так криво, и эдак не очень.
Давай, на работу. Не ленись.
Тред сам не заминусуется.
Проминусуй его, проминисуй его еще раз.
На каникулах для добросовестного выполнения этих занятий должно быть полно времени.