PHP / Тоон үйлдлүүд

Тоон үйлдлүүд

Вэб хөгжүүлэлтэд тоо байнга хэрэглэгддэг — үнэ тооцоолох, оноо нэмэх, статистик харуулах, санамсаргүй тоо үүсгэх гэх мэт. PHP нь Math модульд олон бэлэн функцтэй. Энэ хичээлд тэдгээрийг практик жишээнүүдээр судална.

Тоон төрлүүд ба хязгаар

PHP-д тоог хоёр үндсэн төрлөөр хадгалдаг: integer ба float. Тус бүрийн хязгаарыг мэдэх нь чухал:

php
<?php
// Integer хязгаар
echo PHP_INT_MAX;      // 9223372036854775807
echo PHP_INT_MIN;      // -9223372036854775808
echo PHP_INT_SIZE;     // 8 (байт)

// Float хязгаар
echo PHP_FLOAT_MAX;    // 1.7976931348623E+308
echo PHP_FLOAT_MIN;    // 2.2250738585072E-308
echo PHP_FLOAT_EPSILON; // 2.2204460492503E-16 (хамгийн жижиг ялгаа)

// Тоон шалгалт
var_dump(is_int(42));        // bool(true)
var_dump(is_float(3.14));    // bool(true)
var_dump(is_numeric("42"));  // bool(true) — мөр ч тоо мөн үү?
var_dump(is_numeric("42px")); // bool(false)
?>

Дугуйлах функцүүд

php
<?php
$тоо = 4.67;

echo round($тоо);          // 5   — ойрын бүхэл тоо руу дугуйлна
echo round($тоо, 1);       // 4.7 — 1 аравтын орон
echo round(4.5);           // 5
echo round(4.4);           // 4
echo round(-4.5);          // -5

echo ceil($тоо);           // 5   — дээш дугуйлна (ceiling)
echo ceil(4.1);            // 5

echo floor($тоо);          // 4   — доош дугуйлна (floor)
echo floor(4.9);           // 4

// Бодит жишээ: үнэ дугуйлах
$нийт = 9999 * 1.1;       // 10998.9
echo round($нийт, -2);    // 11000 (зуугийн нарийвчлалаар)
?>

Математикийн үндсэн функцүүд

php
<?php
// Үнэмлэхүй утга
echo abs(-42);             // 42
echo abs(42);              // 42

// Зэрэг ба язгуур
echo pow(2, 10);           // 1024
echo sqrt(144);            // 12
echo sqrt(2);              // 1.4142135623731

// Логарифм
echo log(M_E);             // 1 (натурал логарифм)
echo log(100, 10);         // 2 (аравтын логарифм)
echo log10(1000);          // 3

// Хамгийн их/бага
echo max(3, 7, 2, 9, 1);  // 9
echo min(3, 7, 2, 9, 1);  // 1
echo max([5, 3, 8, 1]);    // 8 (массивт ч ажиллана)

// Нийлбэр
$тоонууд = [10, 20, 30, 40];
echo array_sum($тоонууд);  // 100
?>

Санамсаргүй тоо үүсгэх

php
<?php
// rand() — хурдан боловч урьдчилан таамаглагдаж болно
echo rand();           // 0-с PHP_INT_MAX хүртэл
echo rand(1, 100);     // 1–100 хооронд

// random_int() — аюулгүй, cryptography-д тохиромжтой (PHP 7+)
echo random_int(1, 6);           // шоо шидэх (1–6)
echo random_int(100000, 999999); // 6 оронтой код

// Жишээ: 4 оронтой OTP код үүсгэх
$otp = str_pad(random_int(0, 9999), 4, "0", STR_PAD_LEFT);
echo $otp;   // 0742 (жишээ)

// Массивыг холих
$карт = ["А", "К", "Д", "Х", "10"];
shuffle($карт);
echo implode(", ", $карт);  // санамсаргүй дараалал
?>

Тооцоолол ба форматлах

php
<?php
// Тригонометр (радианаар)
echo sin(M_PI / 2);    // 1
echo cos(0);           // 1
echo tan(M_PI / 4);    // 1

// Тогтмолууд
echo M_PI;             // 3.1415926535898
echo M_E;              // 2.718281828459
echo M_SQRT2;          // 1.4142135623731

// Тоог форматлах
$их_тоо = 1234567.891;
echo number_format($их_тоо);              // 1,234,568
echo number_format($их_тоо, 2);           // 1,234,567.89
echo number_format($их_тоо, 2, ".", " "); // 1 234 567.89

// Тооны систем хооронд хөрвүүлэх
echo decbin(255);      // 11111111   (10 → 2)
echo decoct(255);      // 377        (10 → 8)
echo dechex(255);      // ff         (10 → 16)
echo bindec("1010");   // 10         (2 → 10)
echo hexdec("ff");     // 255        (16 → 10)
?>

Практик жишээ — хүүгийн тооцоолол

php
<?php
function зээлийн_төлбөр(float $үндсэн, float $хүү_хувь, int $сар): float {
    // Сарын хүү
    $сарын_хүү = $хүү_хувь / 100 / 12;

    if ($сарын_хүү === 0.0) {
        return $үндсэн / $сар;
    }

    // Аннуитет томьёо
    $төлбөр = $үндсэн * ($сарын_хүү * pow(1 + $сарын_хүү, $сар))
              / (pow(1 + $сарын_хүү, $сар) - 1);

    return round($төлбөр, 2);
}

$зээл = 10_000_000;   // 10 сая төгрөг
$хүү = 18;            // жилийн 18%
$хугацаа = 24;        // 24 сар

$сарын = зээлийн_төлбөр($зээл, $хүү, $хугацаа);
echo number_format($сарын, 0, ".", ",") . " ₮/сар";
// 499,243 ₮/сар
?>

Дараагийн хичээлд:

Нөхцөлт салаалалт — if, elseif, else хэрхэн ажилладаг, нөхцөл хэрхэн зөв бичих, нэг мөрт (ternary) нөхцөл гэх мэт PHP-ийн шийдвэр гаргах бүтцүүдийг судална.