Работа с числами
Типы данных 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.66
| number_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() одновременно позволяют форматировать как строки, так и числовые значения. Более подробно эти функции рассматриваются ниже, в разделе "Форматирование текстовых строк".
|