Поиск

Использование встроенных математических функций

В РНР есть ряд встроенных функций для обработки математических данных. Мы используем некоторые из них для улучшения сценария numbers.php, об остальных вы можете узнать из руководства по РНР.

Одна из встроенных математических функций, которую можно использо вать в сценарии калькулятора, это round ( } . Как видно из названия, данная функция округляет число до целого по стандартным математическим прави лам: 0,5 и больше округляется до целого числа, меньше 0,5 дробная часть просто отбрасывается. Подразумевается, что функция используется для округ ления дробных чисел, но даже попытка округлить целое число не вызовет ни каких проблем (она просто ничего не будет делать, ведь результатом округле ния числа 2 будет 2). Некоторые примеры:

Number = round(23.309); // $Number равно 23.
SNumber = round(23.51); // $Number равно 24.

В РНР 4.0 можно округлить число до определенного знака после запятой, добавив в уравнение второй параметр:

$Number = round(23.51, 1); // $Number равно 23.5.

На функцию round ( ) похожи две другие функции. Первая, ceil ( ) , округля ет число до следующего целого, а вторая, floor ( ) , до предыдущего целого. Еще одной функцией, которую можно использовать на нашей странице калькуляторе, является abs ( ) . Она возвращает абсолютное значение числа и работает следующим образом:

$Number = abs(23); // $Number равно 23.
$Number = abs(23); // $Number равно 23.

а языке дилетантов абсолютное значение числа всегда положительное число

ве последние функции, которые будут здесь представлены, это srand () и rand ( ) . Последняя представляет собой генератор случайных чисел, а пер вая функцию, инициирующую rand ( ) . Для получения действительно случай ных чисел функцию srand ( ) необходимо использовать до вызова rand ( ) . В ру ководстве по РНР рекомендуется следующий код:

srand ((double) microtimeO * 1000000);

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

В функции rand ( ) можно использовать параметры минимума и максимума, если вы хотите, чтобы генерируемые числа относились к определенному диа пазону.

$RandomNumber = rand (0, 10);

Из вышеупомянутых математических функций в сценарий numbers.php мы включим две abs ( ) и round ( ) для защиты от неверного ввода пользователя. Выполнение действия

  1. Откройте файл numbers.php в текстовом редакторе.
  2. После строки 9 добавьте (листинг 4.5) следующую запись:
  3. $Quantity = abs($Quantity);
    $Discount = abs($Discount);

    Если пользователь введет отрицательное количество или скидку, будет ав томатически предположено, что имелось в виду положительное число, и для внесения соответствующего изменения будет использоваться функция abs ( ) . Можно также округлять переменную $ Quantity, если вы хотите продавать толь ко целые единицы товара. Переписывая этот сценарий, вы можете проявить предусмотрительность и пойти дальше, применив функцию abs ( ) для перемен ной $Payments.

    Листинг 4.5 т С помощью функций round ( ) и abs О можно контролировать корректность денежных операций. Если необходимы целые числа или числа с заданной точностью, используйте функцию round ( ) , а если требуются поло жительные числа abs ( ) .

    1 <HTML>
    2 <HEAD>
    3 <TITLE>Using Numbers</TITLE>
    4 </HEAD>
    5 <BODY>
    6 <?php .
    7 /* Переменная $Quantity должна быть передана в эту страницу из формы.
    $Discount необязательна. */
    8 $Cost = 2000.00;
    9 $Тах =0.06;
    10 $Quantity = abs($Quantity) ;
    11 $Discount = aba($Discount) ;
    12 '$Tax++; // Налог ($Тах) 1.06.
    13 $TotalCost = (($Cost * $Quantity) $Discount) * $Tax;
    14 $Payments = round ($TotalCost, 2) / 12;
    15 // Печать результатов.
    16 print ("You requested to purchase $Quantity widget (s) at $$Cost
    each. n<P>" ) ;
    17 print ("The total with tax, minus your $$Discount, comes to $");
    18 printf ("%01.2f", $TotalCost);
    19 print (".n<P>You may purchase the widget (s) in 12 monthly
    installments of $");
    20 printf ("%01.2f", $Payments);
    21 print (" each. n<P>") ;
    22 ?>
    23 </BODY>
    24 </HTML>
  4. Измените строку 14, на которой рассчитывается переменная $ Payments, следующим образом:
  5. SPayments = round ($TotalCost, 2) / 12;

    Чтобы увеличить правильность расчета, ежемесячные платежи будут вес тись с точностью до центов (число $TotalCost округляется до двух знаков по сле запятой).

  6. Сохраните сценарий, загрузите его на сервер и протестируйте в браузере, введя отрицательное число для количества товара или скидки (рис.).