Работа с числами
Типы данных float и integer являются числовыми. Инициализацию переменных этих типов можно осуществить таким образом:
$intvar =3;
$floatvar =9.3;
При этом интерпретатор РНР автоматически разместит заданные значения в оперативной памяти с учетом их типа.
Выполнение математических операций
Язык РНР позволяет выполнять над числовыми переменными различные операции. При этом необходимо задать два операнда и соответствующий символ математической операции. Например, операцию сложения (+) можно выполнить следующим образом: 1+2
То же самое можно осуществить и с переменными: $var1+$var2
При использовании чисел в математических операциях их не следует заключать в кавычки. В противном случае они будут рассматриваться как строковые переменные, над которыми нельзя выполнять необходимые арифметические операции. Однако в отличие от других языков программирования в РНР по необходимости строки автоматически преобразуются в числовой формат. Например:
$var1 = "1" ;
$var2 = 2;
$total = $varl + $var2;
Формально переменные $var1 и $var2 просуммировать нельзя, поскольку в $var1 содержится текстовая строка. Однако при обработке этого выражения интерпретатор РНР автоматически преобразует строку "1" в числовое значение 1 и корректно выполнит эту операцию.
В следующем фрагменте также выполняется автоматическое преобразование текстовой строки в число, однако конечный результат уже не так очевиден:
$var1 = "х";
$var2 = 2;
$total = $varl + $var2;
Поскольку РНР не может преобразовать символ "х" в числовое значение, то при выполнении сложения вместо него используется значение 0. Таким образом, результат сложения переменных $varl и $var2 будет равен 2. Преобразование типов далеко не всегда приводит к получению желаемых результатов. Безусловно, автоматическое приведение типов является очень удобным и позволяет сэкономить массу усилий. Однако нужно соблюдать осторожность, поскольку оно может привести к получению непредвиденных результатов, как показано в предыдущем примере.
Иногда интерпретатору РНР не удается корректно обработать выражения, которые понятны человеку. Например:
$var1 = "2,000";
$var2 = 2;
$total = $varl + $var2;
Хотя человеку и понятно назначение запятой в значении первой переменной, интерпретатору РНР — нет. Он преобразует строку "2,000" в числовое значение 2, и в результате после выполнения сложения в переменной $total будет содержаться значение 4.
В таблице ниже приведены основные математические операции языка РНР.
Операция | Описание |
+ | Сложение двух чисел |
- | Вычитание второго числа из первого |
* | Умножение двух чисел |
/ | Деление первого числа на второе |
% | Остаток от деления (или деление по модулю). Например, в результате вычисления выражения $а = 13%4 в переменной $а будет содержаться значение 1 |
Порядок выполнения операций
Несколько математических операций можно выполнять одновременно. Например, в следующем выражении используется сразу три операции:
$total=1+2*3+1;
Порядок выполнения операций очень важен, поскольку от этого зависит конечный результат. В языке РНР сначала выполняются операции умножения и деления и лишь потом сложение и вычитание. При равном приоритете операций действия выполняются слева направо. Так, в приведенном выше примере значение переменной $total становится равным 8.
$total = 1+2*3+1 #сначала выполняется умножение
$total = 1+6+1 #затем - левая операция сложения
$total = 7+1 #затем - сложение справа
$total = 8
Изменить последовательность выполнения арифметических операций можно с помощью круглых скобок. Тогда математические операции в скобках будут выполняться в первую очередь. Например, предыдущее выражение можно переписать в следующем виде:
$total = (1+2)*3+1;
После выполнения всех математических преобразований в переменной $total будет содержаться значение 10:
$total = (1+2)*3+1 #сначала выполняется сложение в скобках
$total = 3*3+1 #затем умножение
$result = 9+1 #и наконец сложение
$result = 10
Порядок вычислений в скобках соответствует общим правилам выполнения арифметических операций. Например, в выражении (3+2*5) сначала выполняется умножение, а затем — сложение. Естественно, внутри скобок можно использовать другие скобки и таким образом изменять последовательность выполнения операций.
Лучше руководствоваться поговоркой "Семь раз отмерь — один раз отрежь" и использовать скобки во всех случаях, когда арифметическое выражение выглядит неоднозначным.
Инкрементирование и декрементирование
Увеличить значение переменной на 1 можно следующим образом:
$counter = $counter + 1;
Однако для этого можно воспользоваться и сокращенной конструкцией языка РНР:
$counter++;
Например, рассмотрим выражения:
$counter=0;
$counter++;
echo $counter;
В результате в переменной $counter будет содержаться значение 1 (что и будет выведено на экран). Точно так же можно выполнить и вычитание:
$counter--;
Для увеличения значения переменной на 1 можно воспользоваться еще одним выражением: "+=1". С помощью такой конструкции значение переменной можно изменить произвольным образом. Например:
$counter+=2;
$counter-=3;
$counter*=2;
$counter/=3;
В приведенных примерах выполняется увеличение значения переменной $counter на 2, его уменьшение на 3, умножение на 2 и деление на 3 соответственно.
Использование встроенных математических функций
Более сложные математические вычисления можно выполнять с помощью встроенных функций. Например, если нужно найти квадратный корень некоторого значения, нет необходимости создавать новую функцию, так как она уже существует. Например:
$rootvar = sqrt(91);
$rootvar = sqrt($number);
В первом выражении вычисляется квадратный корень числа 91, а во втором — значения, содержащегося в переменной $number.
Для округления действительного числа к ближайшему большему целому можно воспользоваться функцией:
$upnumber = ceil(27.63);
Результатом этого выражения будет 28. Существует аналогичная функция, которая округляет действительное значение к ближайшему меньшему целому. Например:
$downnumber = floor(27.63);
В этом случае функция floor() вернет значение 27.
В языке РНР определено и много других математических функций: для выполнения простых операций, например поиска максимума, минимума или генерирования случайных чисел, или более сложных— вычисления синуса, тангенса или преобразования чисел в двоичный или восьмеричный формат.
Форматирование чисел для вывода
Зачастую числа необходимо отображать в каком-то определенном формате, например использовать запятую для разделения тысяч или использовать два знака после запятой для обозначения денежной суммы. Однако при использовании РНР числа хранятся и отображаются в наиболее эффективном формате. Так, если в переменной содержится число 10.00, он будет выведено как 10. Если же нужно вывести это число в другом виде, придется явно указать соответствующий формат.
Для определения формата в РНР предназначена функция number_format () с синтаксисом:
number_format(число, количество_десятичных_знаков, "разделитель1", "разделитель2") и со следующими параметрами:
- число. Форматируемое число, которое является обязательным аргументом.
- количество_десятичных_знаков. Определяет количество знаков после запятой. Если этот параметр отсутствует, то по умолчанию его значение равно 0 и, таким образом, число округляется до ближайшего целого числа (т.е. отображается без дробной части). Если используются аргументы разделитель1 и разделитель2, то количество_десятичных_знаков является обязательным параметром.
- разделитель1. Определяет символ, который будет использоваться в качестве символа-разделителя целой и дробной частей. По умолчанию таким символом является точка. Параметр разделитель1 является обязательным, если используется параметр разделитель2.
- разделитель2. Определяет символ, который будет разделителем в целой части числа. По умолчанию в качестве такого символа используется запятая.
В таблице ниже приведено несколько примеров использования функции number_f ormat().
$number Формат Результат 12321
12321.66
12321.66
12321.6
12321
12321.66number_format($number)
number_format($number, 2)
number_format($number)
number_format($number, 3)
number_format($number, 0, ".", ".");
number_format($number, 2, ".", "");12,321
12,321.66
12,322
12,321.600
12.321
12321.66
После форматирования число конвертируется в текстовую строку. Поэтому все арифметические операции необходимо выполнить до форматирования.
Для более сложного форматирования в языке РНР предназначены функции printf() и sprintf().
- Функция printf() позволяет напрямую выводить число в заданном формате.
- Функция sprintf() сохраняет форматируемое число в переменной.
Функции printf() и sprintf() одновременно позволяют форматировать как строки, так и числовые значения. Более подробно эти функции рассматриваются ниже, в разделе "Форматирование текстовых строк".