Перевод строки в число

Тема в разделе "Как сделать...", создана пользователем Joker84, 7 дек 2013.

Статус темы:
Закрыта.
  1. Joker84

    Joker84 Постоялец

    Регистр.:
    8 авг 2007
    Сообщения:
    68
    Симпатии:
    2
    Добрый день,помогите советом если кто знает:
    получаем очень большое число (оно получается путем слияния из нескольких полей что то на подобие ввода кредитной карты - 6 блоков по 4 символа) вот пример 195997400094310013091502
    т.о если сделать(int)195997400094310013091502 не прокате оно вернет 2147483647


    как такую строку перевести в число? чтобы можно было провести сравнение вида


    if (195997400094310013091502 >195997400094310013091400) {действие}
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.547
    Симпатии:
    1.419
    Для чисел помимо integer в php есть только float, но с ним не всё так просто - http://www.php.net/manual/ru/language.types.float.php
    Просто сравнивай получаемые строки функцией - http://www.php.net/manual/ru/function.bccomp.php

    PS: строки тоже можно сравнивать между собой и без дополнительного преобразования типов - это ведь язык с динамической типизацией ;)
    if ('195997400094310013091502' >'195997400094310013091400') {действие}
     
    Последнее редактирование: 7 дек 2013
  3. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    Сроки сравниваются по алфавиту слева направо - это может привести к неверному результату, в случае различного количества разрядов т.е. '9' > '199'.

    Однако, в PHP при сравнении строк, состоящих только из цифр, они предварительно преобразуются в числа (as number) и в данном конкретном примере будет равенство:

    Код:
    echo var_dump('195997400094310013091502' == '195997400094310013091400'); //  bool(true)
    Самый простой вариант (в том смысле, что не требует писать сравнение "ручками") - уравнять количество символов в "числах", добавив слева ведущих нулей (см. str_pad()) к "числу" с наименьшей длиной (strlen()), добавить по одинаковому нечисловому символу (пусть будет 'a') и сравнивать как строки (см пост от latteo).



    Если же количество символов одинаково, можно просто использовать
    Код:
    strcmp('195997400094310013091502' , '195997400094310013091400')
     
    Последнее редактирование: 7 дек 2013
Статус темы:
Закрыта.