PHPの開発では、処理数と浮動小数点数は一般的なタスクであり、2つの関数ceil()とround()は、数字を丸めるためによく使用されます。一見すると、それらはすべて「上向きに丸めている」ようですが、行動と目的は本質的に異なります。ラウンド()の代わりに誤用CEIL() 、または順番に、プログラムロジックエラーを引き起こす可能性が非常に高いです。この記事では、round()の代わりにceil()を使用することで予期しない問題が発生する理由に飛び込みます。
天井(Float $ value):フロート
通過したフローティングポイント数を上に向けて、つまり、その値以上に最小の整数を返します。
round(float $ value、int $ precision = 0、int $ mode = php_round_half_up):float
通過したフローティングポイント数は、丸めルールに従って丸くなり、デフォルトの精度は0、つまり整数に丸められます。
<?php
// 値をテストします
$number1 = 3.2;
$number2 = 3.7;
$number3 = 3.5;
// 使用 ceil()
echo ceil($number1); // 4
echo ceil($number2); // 4
echo ceil($number3); // 4
// 使用 round()
echo round($number1); // 3
echo round($number2); // 4
echo round($number3); // 4
?>
上記のコードから:
CEIL()は無条件に切り上げられますが、たとえ3.1であっても、直接4になります。
round()は丸めの原理に基づいており、3.2は3、3.7のテイク4、3.5テイク4です。
プログラムロジックが、次のような特定のスコアしきい値に基づいて動作を決定するとします。
スコアが5未満の場合は、操作aを実行します。
操作Bを実行するには、画分が5以上等しくなります。
CEIL()を使用して丸くすると、4〜5の間のすべての浮動小数点数が5に引き上げられ、実行されるはずのスコアAが操作を実行すると誤って判断されます。
例コード:
<?php
$score = 4.3;
if (ceil($score) >= 5) {
echo "埋め込むB動作します";
} else {
echo "埋め込むA動作します";
}
?>
出力は次のとおりです。
埋め込むB動作します
4.3は実際には5未満ですが、天井(4.3)は5に等しいため、ロジックはエラーによってトリガーされます。
そして、それがround()に置き換えられている場合:
<?php
$score = 4.3;
if (round($score) >= 5) {
echo "埋め込むB動作します";
} else {
echo "埋め込むA動作します";
}
?>
出力は次のとおりです。
埋め込むA動作します
これが期待に応えることです。
ceil()は、結果を以下のような元の番号に劣らないようにする必要があるシナリオに適しています。
ページのページ数を計算するときは、すべてのデータをカバーするのに十分なページ数があることを確認してください。
容量またはリソースを計算するときは、不足がないことを確認してください。
例えば:
<?php
$totalItems = 23;
$itemsPerPage = 5;
$totalPages = ceil($totalItems / $itemsPerPage);
echo $totalPages; // 5
?>
ここではceil()を使用することは非常に合理的であり、1つのページが欠落していません。
CEIL()は無条件に上方に丸められており、結果は常に元の数値以上です。
round()は丸くなっており、結果は元の数値に近い整数です。
プログラムロジックが「アプローチ」または「標準丸め」に依存している場合、 CEIL()を使用すると判断エラーが発生します。
「保証されていない」結果が本当に必要な場合にのみ、ceil()を使用してください。
上記の説明を通して、これら2つの機能の使用をよりよく区別し、選択が誤っているためにプログラムロジックエラーを回避できることを願っています。
<?php
// 使用 round() 例,論理エラーを避けてください
$price = 19.5;
$finalPrice = round($price);
echo "最終価格はです: " . $finalPrice; // 20
?>
<?php
// 使用 ceil() 例,ページ数を計算します
$totalRecords = 52;
$perPage = 10;
$totalPages = ceil($totalRecords / $perPage);
echo "合計ページ数:" . $totalPages; // 6
?>