Как найти целые числа php

Целые числа

int — это число из множества ℤ = {…, -2, -1, 0, 1, 2, …}.

Смотрите также

  • Числа с плавающей точкой
  • Вычисления над числами с произвольной точностью BCMath
  • Вычисления над целыми числами с произвольной точностью (GNU Multiple Precision)

Синтаксис

Целые числа (int) могут быть указаны в десятичной (основание 10), шестнадцатеричной
(основание 16), восьмеричной (основание 8) или двоичной (основание 2) системе счисления.
Для задания отрицательных целых (int) используется
оператор отрицания

Для записи в восьмеричной системе счисления, необходимо поставить перед числом 0 (ноль).
Начиная с PHP 8.1.0, восьмеричной нотации также может предшествовать 0o или 0O.
Для записи в шестнадцатеричной системе счисления, необходимо поставить перед числом 0x.
Для записи в двоичной системе счисления, необходимо поставить перед числом 0b

Начиная с PHP 7.4.0, целочисленные литералы могут содержать подчёркивания (_) между цифрами для лучшей читаемости литералов. Эти подчёркивания удаляются сканером PHP.

Пример #1 Целые числа


<?php
$a
= 1234; // десятичное число
$a = 0123; // восьмеричное число (эквивалентно 83 в десятичной системе)
$a = 0o123; // восьмеричное число (начиная с PHP 8.1.0)
$a = 0x1A; // шестнадцатеричное число (эквивалентно 26 в десятичной системе)
$a = 0b11111111; // двоичное число (эквивалентно 255 в десятичной системе)
$a = 1_234_567; // десятичное число (с PHP 7.4.0)
?>

Формально, структура целых чисел int принята в PHP 8.1.0
(ранее не допускались восьмеричные префиксы 0o или 0O,
а до PHP 7.4.0 не допускалось подчёркивание):

десятичные        : [1-9][0-9]*(_[0-9]+)*
                  | 0

шестнадцатеричные : 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*

восьмеричные      : 0[oO]?[0-7]+(_[0-7]+)*

двоичные          : 0[bB][01]+(_[01]+)*

целые             : десятичные
                  | шестнадцатеричные
                  | восьмеричные
                  | двоичные

Размер типа int зависит от платформы, хотя, как правило,
максимальное значение примерно равно 2 миллиардам (это 32-битное знаковое).
64-битные платформы обычно имеют максимальное значение около 9E18.
PHP не поддерживает беззнаковые целые числа (int).
Размер int может быть определён
с помощью константы PHP_INT_SIZE, максимальное значение —
с помощью константы PHP_INT_MAX,
а с помощью константы PHP_INT_MIN можно
определить минимальное значение.

Переполнение целых чисел

Если PHP обнаружил, что число превышает размер типа int,
он будет интерпретировать его в качестве float. Аналогично,
если результат операции лежит за границами типа int, он будет преобразован в float.

Пример #2 Переполнение целых на 32-битных системах


<?php
$large_number
= 2147483647;
var_dump($large_number); // int(2147483647)$large_number = 2147483648;
var_dump($large_number); // float(2147483648)$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // float(50000000000)
?>

Пример #3 Переполнение целых на 64-битных системах


<?php
$large_number
= 9223372036854775807;
var_dump($large_number); // int(9223372036854775807)$large_number = 9223372036854775808;
var_dump($large_number); // float(9.2233720368548E+18)$million = 1000000;
$large_number = 50000000000000 * $million;
var_dump($large_number); // float(5.0E+19)
?>

В PHP нет оператора деления целых чисел (int),
для этого используйте функцию intdiv()>.
Результатом 1/2 будет float 0.5.
Если привести значение к int, оно будет округлено вниз, то есть
будет отброшена дробная часть числа.
Для большего контроля над округлением используйте функцию round().


<?php
var_dump
(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>

Преобразование в целое

Для явного преобразования в int, используйте приведение
(int) или (integer). Однако,
в большинстве случаев, в приведении типа нет необходимости, так как значение
будет автоматически преобразовано, если оператор, функция или управляющая структура
требует аргумент типа int. Значение также может быть преобразовано в
int с помощью функции intval().

Если resource преобразуется в int, то
результатом будет уникальный номер ресурса, привязанный к
resource во время исполнения PHP программы.

Смотрите также: Манипуляции с типами.

Из булевого типа

false преобразуется в 0 (ноль), а true — в
1 (единицу).

Из чисел с плавающей точкой

При преобразовании из float в int, число будет округлено
в сторону нуля.
Начиная с PHP 8.1.0, при неявном преобразовании неинтегрального числа с плавающей точкой (float)
в целое число (int), которое теряет точность, выдаётся уведомление об устаревании.


<?phpfunction foo($value): int {
return
$value;
}
var_dump(foo(8.1)); // "Deprecated: Implicit conversion from float 8.1 to int loses precision" начиная с PHP 8.1.0
var_dump(foo(8.1)); // 8 до PHP 8.1.0
var_dump(foo(8.0)); // 8 в обоих случаяхvar_dump((int)8.1); // 8 в обоих случаях
var_dump(intval(8.1)); // 8 в обоих случаях
?>

Если число с плавающей точкой превышает размеры int (обычно
+/- 2.15e+9 = 2^31 на 32-битных системах и
+/- 9.22e+18 = 2^63 на 64-битных системах, результат будет неопределённым,
так как float не имеет достаточной точности, чтобы вернуть верный результат в виде целого числа (int).
В этом случае не будет выведено ни предупреждения, ни даже замечания!

Замечание:

Значения NaN и Infinity при приведении к int становятся равными нулю,
вместо неопределённого значения в зависимости от платформы.

Из строк

Если строка
содержит число
или ведущую числовую последовательность, тогда она будет преобразована в соответствующее целое число,
в противном случае она преобразуется в ноль (0).

Из NULL

Значение null всегда преобразуется в ноль (0).

Из других типов

Предостережение

Для других типов поведение преобразования в int не определено.
Не полагайтесь на любое наблюдаемое поведение,
так как оно может измениться без предупреждения.

php at richardneill dot org

10 years ago


A leading zero in a numeric literal means "this is octal". But don't be confused: a leading zero in a string does not. Thus:
$x = 0123;          // 83
$y = "0123" + 0     // 123

d_n at NOSPAM dot Loryx dot com

15 years ago


Here are some tricks to convert from a "dotted" IP address to a LONG int, and backwards. This is very useful because accessing an IP addy in a database table is very much faster if it's stored as a BIGINT rather than in characters.

IP to BIGINT:
<?php
  $ipArr   
= explode('.',$_SERVER['REMOTE_ADDR']);
 
$ip       = $ipArr[0] * 0x1000000
           
+ $ipArr[1] * 0x10000
           
+ $ipArr[2] * 0x100
           
+ $ipArr[3]
            ;
?>

IP as BIGINT read from db back to dotted form:

Keep in mind, PHP integer operators are INTEGER -- not long. Also, since there is no integer divide in PHP, we save a couple of S-L-O-W floor (<division>)'s by doing bitshifts. We must use floor(/) for $ipArr[0] because though $ipVal is stored as a long value, $ipVal >> 24 will operate on a truncated, integer value of $ipVal! $ipVint is, however, a nice integer, so
we can enjoy the bitshifts.

<?php
        $ipVal
= $row['client_IP'];
       
$ipArr = array(0 =>
                   
floor$ipVal               / 0x1000000) );
       
$ipVint   = $ipVal-($ipArr[0]*0x1000000); // for clarity
       
$ipArr[1] = ($ipVint & 0xFF0000)  >> 16;
       
$ipArr[2] = ($ipVint & 0xFF00  )  >> 8;
       
$ipArr[3] =  $ipVint & 0xFF;
       
$ipDotted = implode('.', $ipArr);
?>


dhairya lakhera

5 years ago


-------------------------------------------------------------------------
Question :
var_dump((int) 010);  //Output 8

var_dump((int) "010"); //output 10

First one is octal notation so the output is correct. But what about the when converting "010" to integer. it should be also output 8 ?
--------------------------------------------------------------------------
Answer :

Casting to an integer using (int) will always cast to the default base, which is 10.

Casting a string to a number this way does not take into account the many ways of formatting an integer value in PHP (leading zero for base 8, leading "0x" for base 16, leading "0b" for base 2). It will simply look at the first characters in a string and convert them to a base 10 integer. Leading zeroes will be stripped off because they have no meaning in numerical values, so you will end up with the decimal value 10 for (int)"010".

Converting an integer value between bases using (int)010 will take into account the various ways of formatting an integer. A leading zero like in 010 means the number is in octal notation, using (int)010 will convert it to the decimal value 8 in base 10.

This is similar to how you use 0x10 to write in hexadecimal (base 16) notation. Using (int)0x10 will convert that to the base 10 decimal value 16, whereas using (int)"0x10" will end up with the decimal value 0: since the "x" is not a numerical value, anything after that will be ignored.

If you want to interpret the string "010" as an octal value, you need to instruct PHP to do so. intval("010", 8) will interpret the number in base 8 instead of the default base 10, and you will end up with the decimal value 8. You could also use octdec("010") to convert the octal string to the decimal value 8. Another option is to use base_convert("010", 8, 10) to explicitly convert the number "010" from base 8 to base 10, however this function will return the string "8" instead of the integer 8.

Casting a string to an integer follows the same the logic used by the intval function:

Returns the integer value of var, using the specified base for the conversion (the default is base 10).
intval allows specifying a different base as the second argument, whereas a straight cast operation does not, so using (int) will always treat a string as being in base 10.

php > var_export((int) "010");
10
php > var_export(intval("010"));
10
php > var_export(intval("010", 8));
8


egwayjen at gmail dot com

5 years ago


"There is no integer division operator in PHP". But since PHP 7, there is the intdiv function.

ganlvtech at qq dot com

2 years ago


Be aware of float to int cast overflow

<?php// You may expected these
var_dump(0x7fffffffffffffff);                // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1);            // float(9.2233720368548E+18)
var_dump((int)(0x7fffffffffffffff + 1));     // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1 > 0);        // bool(true)
var_dump((int)(0x7fffffffffffffff + 1) > 0); // bool(true)
var_dump((int)'9223372036854775807');        // int(9223372036854775807)
var_dump(9223372036854775808);               // float(9.2233720368548E+18)
var_dump((int)'9223372036854775808');        // int(9223372036854775807)
var_dump((int)9223372036854775808);          // int(9223372036854775807)

// But actually, it likes these

var_dump(0x7fffffffffffffff);                // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1);            // float(9.2233720368548E+18)
var_dump((int)(0x7fffffffffffffff + 1));     // int(-9223372036854775808)   <-----
var_dump(0x7fffffffffffffff + 1 > 0);        // bool(true)
var_dump((int)(0x7fffffffffffffff + 1) > 0); // bool(false)                 <-----
var_dump((int)'9223372036854775807');        // int(9223372036854775807)
var_dump(9223372036854775808);               // float(9.2233720368548E+18)
var_dump((int)'9223372036854775808');        // int(9223372036854775807)
var_dump((int)9223372036854775808);          // int(-9223372036854775808)   <-----?>

These overflows are dangerous when you try to compare it with zero, or substract it from another value (e.g. money).


kuzawinski dot marcin_NOSPAM at gmail dot com

2 years ago


Integer literals may be decimal, octal, hexadecimal or binary, but integer values have single representation;

<?php

var_dump

(010); // int(8) NOT int(010)
var_dump(0x10); // int(16) NOT int(0x10)
var_dump(0b10); // int(2) NOT int(0b10) ?>

This is the reason why casting integer to string gives us always a decimal:

<?php

var_dump

((string) 010); // string(8) NOT string(010)
var_dump((string) 0x10); // string(16) NOT string(0x10)
var_dump((string) 0b10); // string(2) NOT string(0b10)?>


rustamabd@gmail-you-know-what

16 years ago


Be careful with using the modulo operation on big numbers, it will cast a float argument to an int and may return wrong results. For example:
<?php
    $i
= 6887129852;
    echo
"i=$in";
    echo
"i%36=".($i%36)."n";
    echo
"alternative i%36=".($i-floor($i/36)*36)."n";
?>
Will output:
i=6.88713E+009
i%36=-24
alternative i%36=20

litbai

7 years ago


<?php
$ipArr
= explode('.', $ipString);
$ipVal = ($ipArr[0] << 24)
       + (
$ipArr[1] << 16)
       + (
$ipArr[2] << 8)
       +
$ipArr[3]
        ;
?>
1. the priority of bit op is lower than '+',so there should be brackets.
2. there is no unsighed int in PHP, if you use 32 bit version,the code above will get negative result when the first position of IP string greater than 127.
3. what the code actually do is calculate the integer value of transformed 32 binary bit from IP string.

Anonymous

8 years ago


Converting to an integer works only if the input begins with a number
(int) "5txt" // will output the integer 5
(int) "before5txt" // will output the integer 0
(int) "53txt" // will output the integer 53
(int) "53txt534text" // will output the integer 53

Anonymous

16 years ago


To force the correct usage of 32-bit unsigned integer in some functions, just add '+0'  just before processing them.

for example
echo(dechex("2724838310"));
will print '7FFFFFFF'
but it should print 'A269BBA6'

When adding '+0' php will handle the 32bit unsigned integer
correctly
echo(dechex("2724838310"+0));
will print 'A269BBA6'


Anonymous

19 years ago


Sometimes you need to parse an unsigned
32 bit integer. Here's a function I 've used:

                                                                                    function parse_unsigned_int($string) {
        $x = (float)$string;
        if ($x > (float)2147483647)
            $x -= (float)"4294967296";
        return (int)$x;
    }


darkshire

15 years ago


d_n at NOSPAM dot Loryx dot com
13-Aug-2007 05:33
Here are some tricks to convert from a "dotted" IP address to a LONG int, and backwards. This is very useful because accessing an IP addy in a database table is very much faster if it's stored as a BIGINT rather than in characters.

IP to BIGINT:
<?php
  $ipArr   
= explode('.',$_SERVER['REMOTE_ADDR']);
 
$ip       = $ipArr[0] * 0x1000000
           
+ $ipArr[1] * 0x10000
           
+ $ipArr[2] * 0x100
           
+ $ipArr[3]
            ;
?>

This can be written in a bit more efficient way:
<?php
  $ipArr   
= explode('.',$_SERVER['REMOTE_ADDR']);
 
$ip       = $ipArr[0]<<24
           
+ $ipArr[1]<<16
           
+ $ipArr[2] <<8
           
+ $ipArr[3]
            ;
?>

shift is more cheaper.


Jacek

16 years ago


On 64 bits machines max integer value is 0x7fffffffffffffff (9 223 372 036 854 775 807).

eric

14 years ago


In response to the comment by me at troyswanson dot net:

-2147483648 falls into the range of 32 bit signed integers yet php treats it as a float.  However, -2147483647-1 is treated as an integer.

The following code demonstrates:
<?php
    var_dump
(-2147483648); //float(-2147483648)
   
var_dump(-2147483647 - 1); //int(-2147483648)
?>

This is probably very similar to the MS C bug which also treats -2147483648 as an UNSIGNED because it thinks it's out of the range of a signed int.

The problem is that the parser does not view "-x" as a single token, but rather as two, "-" and "x".  Since "x" is out of the range of an INT, it is promoted to float, even though in this unique case, "-x" is in the range of an int.

The best cure is probably to replace "-2147483648" with "0x80000000", as that is the hexadecimal equivalent of the same number.

Hope that helps explain what's going on

Peace

- Eric / fez


pere dot cil at wanadoo dot fr

12 years ago


Please also note that the maximum stored in the integer depends on the platform / compilation; on windows xp 32 bits, the following value:

0x5468792130ABCDEF

echoes to:

6.0822444802213E+18 (cast to float)

On a fully 64 bits system, it echoes to:

6082244480221302255


wbcarts at juno dot com

14 years ago


PHP offers a slew of built-in functions and automatic type-casting routines which can get pretty complicated. But most of the time, you still have to take matters into your own hands and allow PHP to do its thing. In that case, and something that has NOT been mentioned, is how to construct your code. To keep things simple, I divide all my scripts in half. The top half gives my scripts the "capability" they need, and the lower half is the actual code to be "run" or "executed".

<?php
/*
* build the program's capability - define variables and functions...
*/
$item_label = '';        // type string
$item_price = 0.0;       // type float
$item_qty = 1;           // type integer
$item_total = 0.0;       // type float - to set use calculate()function calculate(){
  global
$item_price, $item_qty, $item_total;
 
$item_price = number_format($item_price, 2);
 
$item_total = number_format(($item_price * $item_qty), 2);
}

function

itemToString() {
  global
$item_label, $item_price, $item_qty, $item_total;
  return
"$item_label [price=$$item_price, qty=$item_qty, total=$$item_total]";
}
/*
* run the program - set data, call methods...
*/
$item_label = "Coffee";
$item_price = 3.89;
$item_qty = 2;
calculate();           // set $item_total
echo itemToString();   // -> Coffee [price=$3.89, qty=2, total=$7.78]$item_label = "Chicken";
$item_price = .80;     // per lb.
$item_qty = 3.5;       // lbs.
calculate();           // set $item_total
echo itemToString();   // -> Chicken [price=$0.80, qty=3.5, total=$2.80]
?>
Note: All type-casting is done by PHP's built-in number_format() method. This allows our program to enter any number (float or int) on item price or quantity in the runtime part of our script. Also, if we explicitly cast values to integer in the capability part of our script, then we start getting results that may not be desirable for this program. For example, if in the calculate method we cast item_qty to integer, then we can no longer sell chicken by the pound!


13453814063 at 163 dot com

5 years ago


$e = 0x8000000000000000;
$e2 = 0b1000000000000000000000000000000000000000000000000000000000000000;
if ($e == $e2){
    echo "e==e2<br>";
}else{
    echo "e!=e2<br>";
}
pirnt "e!=e2"
----------------------------
echo decbin($e) . "<br>";
echo decbin($e2) . "<br>";
the result is :
1000000000000000000000000000000000000000000000000000000000000000
111111111111111111111111111111111111111111111111111110000000000

dewi at dewimorgan dot com

8 years ago


Note that the soft-typing of numbers in PHP means that some things become very difficult. For example, efficiently emulating the more common linear congruential generators (LCGs) for fast, deterministic, pseudo-randomness. The naive code to create the next value in a sequence (for power-of-2 values of $m) is:

$seed = ($seed * $a + $c) % $m;

...where $m, $a, and $c are values and data types carefully chosen such that repeating this operation will eventually generate every value in the range $0 to $m, with no repetition.

I can find no good commonly used LCGs which use PHP-compatible values. The LCG values used in by rand() in systems like Borland Delphi, Virtual Pascal, MS Visual/Quick C/C++, VMS's MTH$RANDOM, old versions of glibc, Numerical Recipes, glibc, GCC, ANSI C, Watcom, Digital Mars, CodeWarrior, IBM VisualAge C/C++, java.util.Random, Newlib, MMX... *all* fail when ported, for one of two reasons, and sometimes both:

- In PHP on 32 bit machines and all Windows machines, $m = 2^32 or larger requires UInt or even UInt64, or the result becomes negative.

- Large $a multiplied by an integer seed gets converted to a float64, but the number can be too long for the 53-bit mantissa, and it drops the least significant digits... but the LCG code above requires that the most significant digits should be lost.

These are two classes of problem to beware of when porting integer math to PHP,  and I see no clean and efficient way to avoid either one.

So if designing a cross-platform system that must work in PHP, you must select LCG values that fit the following criteria:
$m = 2^31 or less (PHP limitation). Recommend: 2^31.
$a = Less than 2^22 (PHP limitation); $a-1 divisible by all prime factors of $m; $a-1 divisible by 4 if $m is. Recommend: 1+(4*(any prime <= 1048573)).
$c = smaller than (2^53-($m*$a)) (PHP limitation); relatively prime with $m. Recommend: any prime <= 23622320123.


jmw254 at cornell dot edu

16 years ago


Try this one instead:

function iplongtostring($ip)
{
    $ip=floatval($ip); // otherwise it is capped at 127.255.255.255

    $a=($ip>>24)&255;
    $b=($ip>>16)&255;
    $c=($ip>>8)&255;
    $d=$ip&255;

    return "$a.$b.$c.$d";
}



Работая с числамт следует отметить, что PHP обеспечивает автоматическое преобразование типов данных. Например, если вы присвоите переменной целочисленное значение, тип этой переменной автоматически будет целым числом. На следующей строке кода вы можете назначить строку той же переменной и её тип изменится на строку. Это автоматическое преобразование иногда может нарушить ваш код.


Целые числа PHP

Самый простой тип числа в PHP — это целое число. Как вы уже знаете, целое число — это число без десятичной части. Например, 7 представляет собой целое число, а также 10358 или -10358. С другой стороны, 10.0 и 5.58 — это числа с плавающей точкой.

Таким образом, целое число — это недесятичное число от -2147483648 до 2147483647. Значение больше (или меньше), чем этот целочисленный интервал, будет сохранено как float, потому что оно превышает предел целого числа.

Еще одна особенность чисел, которую нужно знать, это то, что даже если 4 * 2.5 равно 10, результат сохраняется как float, потому что один из операндов — float (2.5).

Основные правила определения целого числа:

  • должно содержать хотя бы одну цифру;
  • не должно иметь десятичной точки;
  • может быть положительным или отрицательным;
  • может быть указано в трех форматах: десятичном (основание 10), шестнадцатеричном (основание 16 — с префиксом 0x) или восьмеричном (основание 8 — с префиксом 0).

Функции PHP для проверки целочисленного типа переменной:

  • is_int() – проверяет, является ли значение целым числом
  • is_int() – псевдоним is_int()
  • is_int() – псевдоним is_int()

Проверим, является ли тип переменной целым числом:

<?php
$x = 7775;
var_dump(is_int($x)); // выведет bool(true)

$x = 77.85;
var_dump(is_int($x)); // выведет bool(false)
?>

Результат выполнения кода:

bool(true)
bool(false)

Число с плавающей точкой

В отличие от целых чисел ряд типов float может быть представлен различными способами. Значения 4.54, 7.0, 3.87E+10 и 4.56E-5 — все это числа с плавающей точкой.

PHP автоматически преобразует число в тип float, когда используются десятичные или очень большие числа. Тип float обычно может хранить числа с величиной до 1.7976931348623E+308(зависит от платформы) и иметь максимальную точность 14 цифр.

В PHP есть следующие функции для проверки того, является ли переменная типом float:

  • is_float()
  • is_double() — псевдоним is_float()

Так как is_double() является просто псевдонимом is_float(), вы можете использовать любую из них и получить тот же результат:

<?php
$x = 10.365;
var_dump(is_float($x)); // выведет bool(true)

$x = 77.85;
var_dump(is_double($x)); // выведет bool(true)
?>

Результат выполнения кода:

bool(true)
bool(true)

PHP Бесконечность

В PHP любое числовое значение выше PHP_FLOAT_MAX на платформе считается бесконечным.

Вы можете проверить, является ли числовое значение конечным или бесконечным, используя функции is_finite() и is_infinite().

Функция PHP var_dump() возвращает тип данных и значение:

<?php
$x = 3.14e411;
var_dump($x); // выведет float(INF)
?>

Результат выполнения кода:

float(INF)

Специальное значение NAN

Некоторые функции при работе с числами могут возвращать специальное значение NAN. Значение NAN является сокращением от Not a Number (не число). Данное значение означает, что какая-то используемая математическая функция вышла за пределы допустимого диапазона значений в операциях с плавающей точкой или не смогла обработать свои входные данные. Например, log(-1) будет NAN. Аналогично, acos(5) также будет NAN. Вы можете проверить, не является ли значение, возвращаемое математической операцией, не числом, используя функцию is_nan().

Функция PHP var_dump() возвращает тип данных и значение:

<?php
$x = acos(5);
var_dump($x); // выведет float(NAN)
?>

Результат выполнения кода:

float(NAN)

Числовые строки в PHP

Функцию is_numeric() можно использовать для определения, действительно ли строка или переменная является числовой или нет. Эта функция вернет true для чисел, записанных в восьмеричной, двоичной или шестнадцатеричной нотации. Она также вернет true, если числа записаны в экспоненциальном виде, например, +19.42e49.

PHP будет неявно использовать любую действительную числовую строку для числа, когда возникнет необходимость. Следующие примеры помогут вам лучше понять этот процесс:

<?php
$x = 3985;
var_dump(is_numeric($x));

$x = "3985";
var_dump(is_numeric($x));

$x = "39.85" + 100;
var_dump(is_numeric($x));

$x = 0xfedd24;
var_dump(is_numeric($x));

$x ="0xfedd24";
var_dump(is_numeric($x));

$x = "Привет мир";
var_dump(is_numeric($x));
?>

Результат выполнения кода:

bool(true)

bool(true)

bool(true)

bool(true)

bool(false)

bool(false)

Как вы можете видеть, вся действительная числовая строка была преобразована в их соответствующие значения перед добавлением или другими операциями. Тип переменной $x в результате зависит от её конечного значения.

В предпоследнем случае шестнадцатеричная строка «0xfedd24» не преобразуется в ее десятичное значение потому, что PHP 7 не считает ее допустимой числовой строкой.

Примечание: Примечание: Начиная с PHP 7.0 функция is_numeric() возвращает значение FALSE для числовых строк в шестнадцатеричной форме (например, "0xfedd24"), поскольку они больше не считаются числовыми строками.


Приведение строк и чисел с плавающей точкой к целым числам

Иногда вам будет нужно преобразовать числовое значение в другой тип данных. В PHP имеется множество функций и методов для этих целей. В большинстве случаев приведение будет выполнено неявно и вам не придется беспокоиться об этом. Но, если вам нужно сделать преобразование, используйте методы, приведенные ниже.

Для преобразования любого значения в целое число вы можете использовать функции (int) или (integer). В случае float значения всегда будут округлены до нуля. Другой способ преобразовать строки и float в целые числа применить функцию intval(). Обе функции (int) и intval() работают одинаково.

<?php
// Привести float к int
$x = 77465.768;
$int_cast = (int)$x;
echo $int_cast; echo "<br>";

// Привести строку к int
$x = "77465.768";
$int_cast = (int)$x;
echo $int_cast;
?>

Результат выполнения кода:

77465
77465

How do you verify an array contains only values that are integers?

I’d like to be able to check an array and end up with a boolean value of true if the array contains only integers and false if there are any other characters in the array. I know I can loop through the array and check each element individually and return true or false depending on the presence of non-numeric data:

For example:

$only_integers = array(1,2,3,4,5,6,7,8,9,10);
$letters_and_numbers = array('a',1,'b',2,'c',3);

function arrayHasOnlyInts($array)
{
    foreach ($array as $value)
    {
        if (!is_int($value)) // there are several ways to do this
        {
             return false;
        }
    }
    return true;
}

$has_only_ints = arrayHasOnlyInts($only_integers ); // true
$has_only_ints = arrayHasOnlyInts($letters_and_numbers ); // false

But is there a more concise way to do this using native PHP functionality that I haven’t thought of?

Note: For my current task I will only need to verify one dimensional arrays. But if there is a solution that works recursively I’d be appreciative to see that to.

Сборник математических функций PHP и примеры их использования.

1

Проверка переменных

Является ли переменная числом

is_numeric($value) – проверяет, является ли значение или переменная числом или строкой, содержащей число.

is_numeric(1);       // true
is_numeric(0.1);     // true
is_numeric(-1);      // true
is_numeric(-0.1);    // true
is_numeric('1');     // true
is_numeric('1abc');  // false
is_numeric('abc');   // false

PHP

ctype_digit($value) – проверяет, являются ли все символы в строке цифрами.

ctype_digit('123');     // true
ctype_digit('123.10');  // false
ctype_digit('abc');     // false
ctype_digit('1abc');    // false
ctype_digit('abc1');    // false

PHP

is_int($value) – проверяет, является ли значение целым числом.

is_int(1);       // true
is_int(0.1);     // false
is_int(-1);      // true
is_int(-0.1);    // false
is_int('1');     // false
is_int('1abc');  // false
is_int('abc');   // false

PHP

is_float($value) – проверяет, является ли значение числом с плавающей точкой.

is_float(1);       // false
is_float(0.1);     // true
is_float(-1);      // false
is_float(-0.1);    // true
is_float('1');     // false
is_float('1abc');  // false
is_float('abc');   // false

PHP

Целое или число с плавающей точкой

Следующий пример определяет является ли число целым или с плавающей точкой, при этом не проверяет его отрицательность.

$value = 1;

if (is_int($value)) {
	echo 'Целое число';
} elseif (is_float($value)) {
	echo 'Число с плавающей точкой';
} else {
	echo 'Не число';
}

PHP

Положительное или отрицательное

$value = 1;

if ($value == abs($value)) {
	echo 'Число положительное';
}

if ($value != abs($value)) {
	echo 'Число отрицательное';
}

PHP

Чётное или нечётное

$value = 100;

if (($value % 2) == 0) {
	echo 'Число чётное';
}

if (($value % 2) != 0) {
	echo 'Число не чётное';
}

PHP

2

Привидение к типу

Преобразование в целое число

(int) 1;       // 1
(int) 0.1;     // 0
(int) -1;      // -1
(int) -0.1;    // 0
(int) '1';     // 1
(int) 'abc';   // 0
(int) '1abc';  // 1
(int) 'abc1';  // 0

PHP

В место (int) можно использовать (intiger). Тоже самое делает функция intval():

intval(1);       // 1
intval(0.1);     // 0
intval(-1);      // -1
intval(-0.1);    // 0
intval('1');     // 1
intval('abc');   // 0
intval('1abc');  // 1
intval('abc1');  // 0

PHP

Преобразование в число с плавающей точкой

(float) 1;       // 1
(float) 0.1;     // 0.1
(float) -1;      // -1
(float) -0.1;    // -0.1
(float) '1';     // 1
(float) 'abc';   // 0
(float) '1abc';  // 1
(float) 'abc1';  // 0

PHP

В место (float) можно использовать (double) или (real) и тоже самое делает функция floatval().

floatval(1);       // 1
floatval(0.1);     // 0.1
floatval(-1);      // -1
floatval(-0.1);    // -0.1
floatval('1');     // 1
floatval('abc');   // 0
floatval('1abc');  // 1
floatval('abc1');  // 0

PHP

3

Округление

Функция round($value, $precision) округляет значение до указанных цифр после запятой.

echo round(100001.123456, 2);  // 100001.12

PHP

Функция может окрукруглять значение целой части (числа перед запятой), для этого нужно указать отрицательное значение во втором аргументе.

echo round(25674, -2);  // 25700

PHP

Округление до целого числа в меньшую сторону:

echo floor(100.4);  // 100
echo floor(100.9);  // 100

PHP

Округление до целого числа в большую сторону:

echo ceil(100.4);  // 101
echo ceil(100.1);  // 101

PHP

4

Ведущие нули

Добавить ведущие нули:

echo sprintf("%06d", 100);   // 000100
echo sprintf("%010d", 100);  // 0000000100

PHP

Удалить ведущие нули:

echo intval('0000000100');  // 100

// Или с помощью ltrim
echo ltrim('0000000100', '0');  // 100

PHP

5

Абсолютное значение

Функция abs($value) – возвращает абсолютное значение (модуль числа), т.е. из отрицательного делает положительное.

echo abs(100);   // 100
echo abs(-100);  // 100

echo abs(1.5);   // 1.5
echo abs(-1.5);  // 1.5

PHP

Сделать число отрицательным:

$value = 10;
$value = -abs($value);

echo $value;  // -10

PHP

6

Инкремент и декремент

Инкремент – увеличение значения на единицу, бывает постфиксный и префиксный.

// Постфиксный инкремент
$value = 10;
echo $value++;  // 10
echo $value;    // 11

// Префиксный инкремент
$value = 10;
echo ++$value;  // 11
echo $value;    // 11

PHP

Декремент уменьшает значение на единицу.

// Постфиксный декремент
$value = 10;
echo $value--;  // 10
echo $value;    // 9

// Префиксный декремент
$value = 10;
echo --$value;  // 9
echo $value;    // 9

PHP

7

Минимальное значение

echo min(6, 0, 1, 10); // 0

PHP

Минимальное значение из массива:

$array = array(6, 0, 1, 10);
echo min($array); // 0

PHP

Минимальное значение, исключая ноль:

function min_not_null(Array $values) {
	return min(array_diff(array_map('intval', $values), array(0)));
}

$array = array(6, 0, 1, 10);
echo min_not_null($array);  // 1

PHP

8

Максимальное значение

echo max(6, 0, 1, 10);  // 10

PHP

Максимальное значение из массива:

$array = array(6, 0, 1, 10);
echo max($array);  // 10

PHP

9

Математические функции

Возведение в степень:

echo pow(100, 2);  // 10000

PHP

Квадратный корень:

Натуральный логарифм:

echo log(10);  // 2.302585092994

PHP

10

Тригонометрические функции

$x = 0.5;

echo sin($x);   // 0.4794255386042
echo cos($x);   // 0.87758256189037
echo tan($x);   // 0.54630248984379

echo asin($x);  // 0.5235987755983
echo acos($x);  // 1.0471975511966
echo atan($x);  // 0.46364760900081

PHP

«целое число php«? Как проверить целое ли число php, что такое целое число? Несколько вариантов проверки — это целое число php?.

  • Что такое целое число.

    Давайте начнем с определения : «Что такое целое число«, вы можете найти данное определение в любом учебник, но я напишу совё собственное!

    Определение : «Что такое целое число«.

    Любое число(положительное, отрицательное, ноль), которое не имеет знаков после запятой — является «целым числом«!

    Сложение целых чисел.

    Если сложить два целых числа, то всегда получится целое число«!

    Деление целых чисел.

    Если Разделить два целых числа, то

    не

    всегда получится целое число«! В зависимости от того, кратно ли делимое и делитель.

    Например есть такая вещь, как «деление без остатка». Если два числа делятся без остатка, то… соответственно при делении двух целых чисел получится целое… wall
    смайлы.
    Также существуют признаки делимости.

    С минимальными понятиями о целом числе… надеюсь разобрались… переходим к основным темам нашей страницы:

  • Самый простой способ определить целое число php

    наверное самый простой способ проверить на целое число в php — это is_int для этого Вам понадобится:

    Как вы наверно знаете, что «is_int» вернет true — если число целое и «false»(что такое false/true)

    Из-за возвращаемых значений вы можете написать условие с if + echo и с использованием is_int проверки целого числа php:


    <?
    if( is_int(число)) echo 'число целое';
    else echo 'число не целое';
    ?>

    Пример проверки целое ли число php:

    Применением данный код к нескольким числам:

    Возьмем изначально целое число 2 и поместим его в приведенный код:

    <?

    if( is_int(2)) echo 'число целое';

    else echo 'число не целое';

    ?>

    Результат работы кода проверки целое ли число php:

    Мне остается поместить приведенный код прямо здесь:

    число целое

    Аналогичная проверка числа с дробью 2.1:

    Не буду приводить код см выше… только заменим число на 2.1:

    число не целое

    Интересная проверка числа с дробью 2.00:

    Предположим, что вам нужно проверить … является ли число 2.00… если вы спросите меня… то… я вам скажу, что:

    С одной стороны — число 2.00 — это целое число.

    Но с другой стороны число 2.00 не является целым…

    Является ли число с нулями целым или нецелым…?

    В интернете вы найдете эти две точки зрения… я бы ответил так…

    В зависимости от того, с какой точки вы смотрите, то число «2.00» будет целым, либо нецелым!

    Проверим такое спорное число с помощью isInt

    Если Вы примените выше приведенный код проверки числа на целое или нет, то вы получите результат:

    число не целое

  • Еще способ определить целое число php

    В разных учебниках, в разных калькуляторах целое число отделяется от дроби :

    Иногда запятой.

    Иногда точкой.

    Но нас сейчас интересует, чем отделяетсЯ целое число в php…

    Поэтому сделаем самый простой пример, чтобы число разделилось с дробью… например 3/2 и выведем с помощью echo… и ниже вы видите, что целое число в php отделяется точкой:

    1.5

    Переходим к определению целого числа в php

    Самый простой способ — это поиск точки в числе… например с помощью substr_count :

    + нам


    <?
    if(@substr_count( 3/2 , '.')) echo 'число не целое';
    else echo 'число целое';
    ?>

    число не целое

    Но! Здесь есть но!

    Если в данное проверке на целое число php будет например число вида:

    2.000
    Условие сработает как:

    число не целое

    Код определения целого числа php

    Поэтому нам нужно изменить код определения целого числа в php ;

    Поместим в переменную наше число, чтобы его не повторять два раза:

    $var = 2.00 ;

    Возьмем ранее показанный код и добавим в место, где не целое число дополнительную проверку:

    Проверка банальная… отделим всё, что есть после запятой , используем для этого «explode» в первой ячейке будет находится дробная часть:

    explode( ‘.’ , $var)[1]

    Добавляем ноль с точкой + if и проверяем с помощью два равно :

    if( ‘0.’ .explode( ‘.’ , $var)[1] ==0)

    Код php определения целого числа или нет.

    <?

    $var = 2.00 ;

    if(@substr_count( $var , '.'))

    {

      if( '0.' .explode( '.' , $var)[1] ==0 ) $echo1 = 'число целое';

      else $echo1 = 'число не целое';

    }

    else $echo1 = 'число целое';

    ?>

    Пример выполнения кода php определения целого числа или нет.

    Мне остается вывести данный код прямо здесь:

    число целое

  • Функция определить целое число php

    Если вам много и часто приходится проверять на целое ли число либо нет, то вам будет намного проще… если написать вот такую простую функцию определения целого числа…

    Про is_int здесь.

    <?

    function isInt($e)

    {

    if( is_int($e)) return 'число целое';

    else return 'число не целое';

    }

    echo isInt(2);

    echo isInt(2.1);

    ?>

    Выведем результаты работы функции целое ли число php^

    Первое echo :

    число целое

    Второе echo :

    число не целое

    Понравилась статья? Поделить с друзьями:

    Не пропустите также:

  • Как найти драйвер на камеру ноутбука
  • Как нашли нефть на аравийском полуострове
  • Как найти папика в москве парню
  • Капает кран фильтра барьер как исправить
  • Как найти гомологи бензола

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии