- 1
if (i.toString().indexOf('.') == -1) { ... }
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
if (i.toString().indexOf('.') == -1) { ... }
Ещё один способ проверить, целое ли число.
kegdan 22.07.2014 19:20 # −1
3.14159265 22.07.2014 20:01 # 0
kegdan 22.07.2014 20:04 # +1
(i===i|0) толстая баба пытается загнать тощего мужика в койку (вид в замочную скважину)
1024-- 22.07.2014 21:20 # −1
P.S. нужно больше скобок, чем указано: ((i|0)===i)
kegdan 22.07.2014 21:43 # +7
3.14159265 22.07.2014 23:01 # +4
eth0 23.07.2014 20:02 # −2
3.14159265 22.07.2014 23:08 # −1
Насколько больше? Какой от этого толк?
i="2";//выдаст на строке true
Полагаю неявных конвертаций типов нужно избегать. Потому я поставил ===, а не == (а именно они приводят тип неявно)
1024-- 23.07.2014 13:38 # −1
Насколько больше каких-нибудь значений, чем чисел :)
Позволяет меньше думать, писать меньше кода.
> Полагаю неявных конвертаций типов нужно избегать.
Нужно, но иногда хочется конвертнуть...
zloirock 22.07.2014 21:33 # −1
3.14159265 22.07.2014 23:03 # −1
(i-(i|0)==0) тоже вернет false.
http://ideone.com/EyxNpH
zloirock 22.07.2014 23:21 # −1
3.14159265 22.07.2014 23:24 # 0
> 2147483648 уже не целое? :)
Нет конечно.
zloirock 22.07.2014 23:29 # −1
> Нет конечно.
Отсюда поподробней :)
3.14159265 22.07.2014 23:30 # 0
zloirock 22.07.2014 23:33 # −1
3.14159265 22.07.2014 23:58 # 0
Вариант bormandа точно говорит - true.
>9007199254740991
Понимающий суть вопроса человек написал бы ± ((1<<53)-1).
Всем сразу понятно откуда лезет эта мантисса.
>23233333333333333
>на счет него точно сказать нельзя
Насчёт него можно точно сказать что оно целое (как число), однако оно не влазит ни в тип js "целое", и не влазит в тип js Float64.
zloirock 23.07.2014 00:05 # −5
Но ведь ты так смешно реагируешь :)
3.14159265 23.07.2014 00:52 # −1
4294967296>>1
zloirock 23.07.2014 00:57 # −1
3.14159265 23.07.2014 00:59 # 0
zloirock 23.07.2014 01:13 # −5
zloirock 23.07.2014 12:49 # −1
3.14159265 22.07.2014 23:33 # 0
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);
Фейл.
zloirock 22.07.2014 23:34 # −2
3.14159265 22.07.2014 23:36 # 0
zloirock 22.07.2014 23:37 # −2
3.14159265 23.07.2014 00:45 # +2
Получается true,false - целые числа, так?
zloirock 23.07.2014 00:58 # −1
3.14159265 23.07.2014 01:01 # +2
>>на счет него точно сказать нельзя
Верно я понимаю?
Кстати что там спецификация говорит по этому поводу?
zloirock 23.07.2014 01:03 # 0
3.14159265 23.07.2014 01:08 # +1
Вопрос был такой:
То есть получается true,false - полноправные целые числа, а вот насчёт 23233333333333333 "на счет него точно сказать нельзя"?
zloirock 23.07.2014 01:19 # 0
3.14159265 23.07.2014 10:32 # 0
То что true, false приводятся к числу не делает их числами.
Для проверки является объекта есть оператор typeof. Возможно ту часть спецификации, которая его описывает на русский еще не перевели.
Но typeof false == "boolean".
А typeof 1 == "number".
А number в переводе с английского это число, false не может быть целым числом, поскольку в оригинале спецификации поясняется что это вовсе не число.
zloirock 23.07.2014 12:46 # 0
isNaN('foo'); // => true
zloirock 23.07.2014 01:20 # −5
3.14159265 23.07.2014 11:42 # +2
Ладно. Я беру число из безопасного диапазона и проверяю его "успешным" методом
9007199254740000.5%1==0
Получается 9007199254740000.5 - целое? Верно?
Подтекает абстракция, подтекает.
zloirock 23.07.2014 12:42 # −1
console.log(9007199254740000.5); // => 9007199254740000
3.14159265 23.07.2014 12:59 # +1
Проверка не работает. Невозможно установить дробное число или нет. Фейл.
>В выражении "безопасные целые" никакое слово не смущает? :)
А насчёт безопасных плавающих там ничего не написано?
То как-то непонятно:
3007199254740000.1 % 1 == 0 //целое
3007199254740000.5 % 1 == 0.5//плавающее
zloirock 23.07.2014 13:11 # 0
> Проверка не работает. Невозможно установить дробное число или нет.
А оно именно целое, спасибо представлению чисел в js, повторюсь:
console.log(9007199254740000.5); // => 9007199254740000
console.log(3007199254740000.1); // => 3007199254740000
console.log(3007199254740000.5); // => 3007199254740000.5
Так что фэйл твой.
3.14159265 23.07.2014 13:12 # +1
>console.log(9007199254740000.5); // => 9007199254740000
>console.log(3007199254740000.1); // => 3007199254740000
У вас флоат-абасракция потекла прямо по штанине.
Что в стандарте-то написано или не перевели еще?
zloirock 23.07.2014 13:21 # −1
3.14159265 23.07.2014 13:23 # +1
Что нам скажет console.log?
[] - какое это число? А по сабжу массив а со всяким мусором внутри тоже получается целое число?
zloirock 23.07.2014 13:24 # 0
Ты так и не ответил, целое ли число -1, ведь побитовый сдвиг >>> с ним не работает.
3.14159265 23.07.2014 13:29 # 0
>[] == 0
Равно потерял [] === 0 //false
zloirock 23.07.2014 13:32 # −1
3.14159265 23.07.2014 13:38 # +1
Это ваши привидения сугубо нематериальная субстанция.
Я когда был маленький, то боялся привидений, а сейчас особенно боюсь всяких подозрительных приведений типов...
zloirock 23.07.2014 13:44 # −1
3.14159265 23.07.2014 13:49 # +1
>Не можешь смириться с логикой
С логикой что Логический тип boolean является Целочисленным типом int32? Или что массив с мусором является Целочисленным типом?
1024-- 23.07.2014 13:51 # +2
Зачем знать, как массив преобразуется в число? (Исключая случай, когда нужно кого-то потроллить в интернетах) Это когда-нибудь нужно в нормальной ситуации?
zloirock 23.07.2014 13:58 # 0
3.14159265 23.07.2014 13:32 # +2
Отвечаю. Число -1 целое, поскольку представимо целым типом данных.
>ведь побитовый сдвиг >>> с ним не работает.
Редчайшую ахинею порет Мастер ЖС.
Побитовый сдвиг работает:
http://ideone.com/MSfk2X
zloirock 23.07.2014 13:35 # 0
Точно так же, как и прочие побитовые операции с целыми, не входящими в int32. Противоречия не находишь? :)
3.14159265 23.07.2014 13:40 # 0
В ваших рассуждениях - постоянно.
zloirock 23.07.2014 13:47 # 0
Да ладно? Укажите хоть на одно.
> почему в множестве "безопасные целые js" не работает операция побитового сдвига, очевидно и естественно применимая к целым числам
2147483648 >> 0 // => -2147483648
> Побитовый сдвиг работает
-1 >>> 0 // => 4294967295
3.14159265 23.07.2014 14:01 # +2
>-1 >>> 0
Это фальшивый сдвиг. И хвалёное неявное приведение типов. Их бинарные представления в int32 идентичны.
Берем число, которое не влазит в int32 в левую руку 8000000000:
Бинарное представление:
0b111011100110101100101000000000000
Должны получить бинарное представление:
0b11101110011010110010100000000000
Сдвигаем левой рукой его вправо и получаем:
1852516352
Бинарное представление:
0b1101110011010110010100000000000
Пропала верхняя 1.
zloirock 23.07.2014 14:20 # +1
Бля... Убедил. В JS есть честные инты - int32, все целые, что в этот диапазон не входят - не имеют права называться целыми. Оператор >> - честный побитовый сдвиг, а >>> - фальшивый, потому как работает с uint32, а его в js нет. Числа в памяти должны представляться с той же точностью, что используется в литерале. Использующие неявное приведение типов должны гореть на кострах инквизиции, потому как кое-кто его не понимает. А еще у оператора | приоритет выше, чем у ===.
За сим откланиваюсь.
3.14159265 23.07.2014 14:22 # 0
Фальшивый в том смысле что это сдвиг на 0 бит.
3.14159265 23.07.2014 14:37 # +2
http://ideone.com/pJYdpi
>В JS есть честные инты - int32, все целые, что в этот диапазон не входят - не имеют права называться целыми.
Поскольку тогда они представимы не целым типом, а плавающим.
Плавающий тип не может называться целым, поэтому мы и наблюдаем как плывет абасракция.
Память компьютера ограничена техническими факторами, потому вместо понятия целое число (бесконечное множество) используется понятие "целый тип".
3.14159265 22.07.2014 23:54 # +1
Объясняю. В js целым типом является int32, всё что выше неявно сконвертировано в тип float64.
Int - сокращение от integer, в переводе это значит "целое".
У меня язык не поворачивается назвать Float целым. И строку целым числом я назвать не могу.
zloirock 23.07.2014 00:04 # −1
3.14159265 23.07.2014 00:06 # +1
Тип Number Числовой тип имеет ровно 18437736874454810627 (то есть, 264−253+3) значений, представляющих собой 64-битовые значения с удвоенной точностью в формате IEEE 754 в соответствии со Стандартом IEEE для двоичной арифметики с плавающей точкой
zloirock 23.07.2014 00:12 # −1
Ну да, 2147483648 точно не целое :D
3.14159265 23.07.2014 00:46 # +1
Числа представимы и типом String, это не делает тип String целочисленным.
zloirock 23.07.2014 01:01 # −3
Про спеку на русском языке - о тебе же, глупеньком, беспокоюсь.
Да, с твоей позиции в js вообще нет целых чисел, потому как int32 / uint32 в js отсутствуют, просто некоторые операторы работают с его числами как с int'ами :)
3.14159265 23.07.2014 01:06 # +1
Обосрался - притворись что проявил заботу.
>Да, с твоей позиции в js вообще нет целых чисел, потому как int32 / uint32 в js отсутствуют
Не надо ложить мне в рот слова. Я такого не писал.
Рекомендую научиться читать, и осмысливать прочитанное, прежде чем вступать в спор:
>> В js целым типом является int32, всё что выше неявно сконвертировано в тип float64.
zloirock 23.07.2014 01:13 # −2
Как грубо :) Нечем возразить - начинай хамить.
> Не надо ложить мне в рот слова. Я такого не писал.
Да ладно, будто под словами, что 2^31 не целое подразумивалось нечто иное :)
kegdan 23.07.2014 06:39 # +1
bormand 23.07.2014 07:05 # +2
3.14159265 23.07.2014 10:52 # +2
"123"+4="1234"
4+"123"="4127"
Что я делаю не так?
kegdan 23.07.2014 10:56 # 0
roman-kashitsyn 23.07.2014 11:15 # 0
kegdan 23.07.2014 11:39 # 0
3.14159265 23.07.2014 00:58 # 0
>23233333333333333
>>на счет него точно сказать нельзя
Ну да :)))))
zloirock 23.07.2014 01:03 # 0
gost 23.07.2014 11:16 # +5
zloirock 23.07.2014 12:42 # −1
gost 23.07.2014 20:32 # −1
kegdan 23.07.2014 20:50 # −4
anonimb84a2f6fd141 24.07.2014 20:22 # −1
roman-kashitsyn 23.07.2014 11:04 # +2
А вот авторы Lua без зазрения совести выпилили из языка все числовые типы кроме Float и смело индексируют массивы ("таблицы") числами с плавающей точкой.
Мне это тоже мозг выносит. Зато холиваров подобных нет.
3.14159265 23.07.2014 13:11 # 0
О массивы(мапы?) в жс, это что-то:
a[7.01]=1
console.log(a[7.01])=1
console.log(a)=[]
1024-- 23.07.2014 13:49 # 0
> console.log(a)=[]
А надо, чтоб как в Lua работало?
3.14159265 23.07.2014 16:45 # 0
Честно, не знаю как лучше. И так криво, и эдак не очень.
3.14159265 23.07.2014 11:40 # +2
kegdan 23.07.2014 11:45 # −2
Lure Of Chaos 23.07.2014 17:58 # −1
eth0 23.07.2014 20:07 # +2
kegdan 23.07.2014 20:14 # −1
anonimb84a2f6fd141 24.07.2014 20:24 # −2
3.14159265 24.07.2014 20:58 # +1
Давай, на работу. Не ленись.
Тред сам не заминусуется.
Проминусуй его, проминисуй его еще раз.
anonimb84a2f6fd141 24.07.2014 21:06 # −1
3.14159265 24.07.2014 21:43 # +1
На каникулах для добросовестного выполнения этих занятий должно быть полно времени.
kegdan 24.07.2014 22:34 # 0