1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
<?php
function printResult (array $cases, RoundingMode $mode)
{
foreach ($cases as [$num, $precision]) {
echo str_pad("[{$num}, {$precision}]", 17, ' ', STR_PAD_LEFT), " => ", bcround($num, $precision, $mode), "\n";
}
echo "\n";
}
function run_round_test(RoundingMode $mode)
{
$non_boundary_value_cases = [
['1.1', 0],
['1.2', 0],
['1.3', 0],
['1.4', 0],
['1.6', 0],
['1.7', 0],
['1.8', 0],
['1.9', 0],
['-1.1', 0],
['-1.2', 0],
['-1.3', 0],
['-1.4', 0],
['-1.6', 0],
['-1.7', 0],
['-1.8', 0],
['-1.9', 0],
];
$minus_precision_cases = [
['0', -3],
['0.01', -3],
['-0.01', -3],
['50', -2],
['-50', -2],
['1230', -1],
['1235', -1],
['-1230', -1],
['-1235', -1],
['3400.0000', -2],
['3400.0001', -2],
['3450.0000', -2],
['3450.0001', -2],
['-3400.0000', -2],
['-3400.0001', -2],
['-3450.0000', -2],
['-3450.0001', -2],
];
$zero_precision_cases = [
['1235', 0],
['1235.0', 0],
['1235.000001', 0],
['1235.5', 0],
['1235.500001', 0],
['-1235', 0],
['-1235.0', 0],
['-1235.000001', 0],
['-1235.5', 0],
['-1235.500001', 0],
['0.0001', 0],
['0.5', 0],
['0.5000', 0],
['0.5001', 0],
['-0.0001', 0],
['-0.5', 0],
['-0.5000', 0],
['-0.5001', 0],
];
$plus_precision_cases = [
['28.40', 1],
['28.4000001', 1],
['28.45', 1],
['28.4500001', 1],
['-28.40', 1],
['-28.4000001', 1],
['-28.45', 1],
['-28.4500001', 1],
['153.90', 1],
['153.9000001', 1],
['153.95', 1],
['153.9500001', 1],
['-153.90', 1],
['-153.9000001', 1],
['-153.95', 1],
['-153.9500001', 1],
['0.000001', 3],
['0.0005', 3],
['0.000500', 3],
['0.000501', 3],
['-0.000001', 3],
['-0.0005', 3],
['-0.000500', 3],
['-0.000501', 3],
];
echo "========== non-boundary value ==========\n";
printResult($non_boundary_value_cases, $mode);
echo "========== minus precision ==========\n";
printResult($minus_precision_cases, $mode);
echo "========== zero precision ==========\n";
printResult($zero_precision_cases, $mode);
echo "========== plus precision ==========\n";
printResult($plus_precision_cases, $mode);
}
|