![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Собственно возник такой вопрос в одном из топиков. Дабы не засорять его, выношу обсуждение сюда.
Я в своих проекта всегда использую (float) исхожу из того что:
Дает такие результаты: 2147483647 12345678910 В нагруженных проектах есть поле id, которое auto_increment. Есть вероятность, что когда-то мы поймаем такую багу с intval($num) Кто что скажет? |
|||
|
||||
NNaarreekk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 768 Регистрация: 23.6.2007 Где: Армения Репутация: 0 Всего: 3 |
capitan, ну ты и оптимист
![]() Пока на сайте дойдет до миллиарда записей, то уже наверно в место РНР еще что-нибудь придумают))) А вообще если есть конкретно ошибка при интвал значит его не нужно использовать в этом случае, ИМХО. |
|||
|
||||
Kevin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 20.11.2005 Репутация: 2 Всего: 2 |
Вероятность есть, а в PHP единственный тип данных для больших чисел — float.
|
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
может быть, кто-нибудь здесь осилит раздел документации, посвященный типам данных?
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Это не бага. http://php.net/int Это сообщение отредактировал(а) sTa1kEr - 3.11.2009, 14:23 |
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
А зачем? ![]() И типам данных чего? MySQL? PHP? В теории 2млрд записей хватит на 68 лет при скорости 1 запись в секунду ![]() Если мы увеличим скорость до 100к в секунду, то всего около 6 часов. Другой вопрос, что тогда автоинкрементный id скорее всего будет несколько неактуален ![]() С флоатом тоже не все так гладко ![]() ![]() Ну и на закуску.... В теории при переходе на полностью 64 битные системы ваше целое число вырастет ![]() ![]() Поправка ![]() Это сообщение отредактировал(а) Simpliest - 3.11.2009, 14:30 |
|||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
при использовании prepared statements (mysqli) intval/float не нужны, т.е. id всегда будет храниться в виде строки. Да и для mysql не обязательно, можно просто проверять, что id (пришедший от пользователя) содержит только цифры
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
||||
|
||||
youri |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 17.4.2004 Репутация: 6 Всего: 16 |
кстати, кто-нибудь знает, до каких пор можно рассчитывать, что "целочисленная" строка преобразуется в float без потерь? Я так понимаю до 2**52-1?
|
|||
|
||||
Kevin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 20.11.2005 Репутация: 2 Всего: 2 |
Не напомните, что совершенно случайно передается первым аргументом в bind_param()? ![]() -- Про БД конечно не совсем это актуально, но, как я понял, топикстартер просто привел неудачный пример, иллюстрируя несколько другую идею. Это сообщение отредактировал(а) Kevin - 3.11.2009, 15:08 |
|||
|
||||
Simpliest |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Я же ответил Плясать лучше отсюда http://www.psc.edu/general/software/packages/ieee/ieee.php 2 цифры уйдут на округление. Добавлено через 1 минуту и 7 секунд Kevin, для очень больших чисел всегда есть GMP и BCMath 100 знаков точности - не предел. |
|||
|
||||
Kevin |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 20.11.2005 Репутация: 2 Всего: 2 |
К самому PHP они относятся слабо, и не отменяют того, что есть только int и float. А тот же BCMath, в конечном счете, отдает простую строку. P.S.: Вообще, о чем спор? Есть int, есть float, есть разные уловки и библиотеки как преодолеть ограничения, о чем топик? |
|||
|
||||
capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Сразу скажу, я не теоретик, а практик. Просто зашел спор как приводить полученную переменную. Я привожу всегда (float), Ипатьев говорит что нужно использовать intval. Я привел пример, может и не удачный, но исходя из чего я исходил. Можно было конечно привести пример online калькулятора. Вот хочу понять, когда применять intval, а когда float. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
для случаев где проверяется число менее 11 знаков - intval, для случаев большего -
100%-вариант |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Насколько я помню, с вещественными числами могут быть проблемы.
Когда 1111111111 станет вдруг 1111111110.99999999 Сейчас, правда, воспроизвести их не удалось. Но, на мой взгляд, функцию надо применять по назначению. Если нам нужно целое - мы приводим к целому. Если нужно вещественное - приводим к вещественному. Не наоборот. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |