diff --git a/ext/standard/tests/math/round_modes.phpt b/ext/standard/tests/math/round_modes.phpt index 03479c4d908fe..23a0224efbca6 100644 --- a/ext/standard/tests/math/round_modes.phpt +++ b/ext/standard/tests/math/round_modes.phpt @@ -2,37 +2,286 @@ round() with different rounding modes --FILE-- PHP_ROUND_HALF_UP, + "PHP_ROUND_HALF_DOWN" => PHP_ROUND_HALF_DOWN, + "PHP_ROUND_HALF_EVEN" => PHP_ROUND_HALF_EVEN, + "PHP_ROUND_HALF_ODD" => PHP_ROUND_HALF_ODD, +]; + +$numbers = [ + 2.5, + -2.5, + 3.5, + -3.5, + 7, + -7, + 0.61, + 0.69, + 0, + 1.9999, + -1.9999, + 0.0001, + -0.0001, +]; +$precisions = [0, 1, 2, 10]; + +foreach ($modes as $modeKey => $mode) { + echo "mode: $modeKey\n"; + foreach ($precisions as $precision) { + echo "\tprecision: $precision\n"; + foreach ($numbers as $number) { + $result = round($number, $precision); + echo "\t\t" . + str_pad($number, 7, " ", STR_PAD_LEFT) . + " => $result\n"; + } + echo "\n"; + } +} + ?> --EXPECT-- -float(3) -float(2) -float(2) -float(3) -float(-3) -float(-2) -float(-2) -float(-3) -float(4) -float(3) -float(4) -float(3) -float(-4) -float(-3) -float(-4) -float(-3) +mode: PHP_ROUND_HALF_UP + precision: 0 + 2.5 => 3 + -2.5 => -3 + 3.5 => 4 + -3.5 => -4 + 7 => 7 + -7 => -7 + 0.61 => 1 + 0.69 => 1 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 1 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.6 + 0.69 => 0.7 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 2 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 10 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 1.9999 + -1.9999 => -1.9999 + 0.0001 => 0.0001 + -0.0001 => -0.0001 + +mode: PHP_ROUND_HALF_DOWN + precision: 0 + 2.5 => 3 + -2.5 => -3 + 3.5 => 4 + -3.5 => -4 + 7 => 7 + -7 => -7 + 0.61 => 1 + 0.69 => 1 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 1 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.6 + 0.69 => 0.7 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 2 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 10 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 1.9999 + -1.9999 => -1.9999 + 0.0001 => 0.0001 + -0.0001 => -0.0001 + +mode: PHP_ROUND_HALF_EVEN + precision: 0 + 2.5 => 3 + -2.5 => -3 + 3.5 => 4 + -3.5 => -4 + 7 => 7 + -7 => -7 + 0.61 => 1 + 0.69 => 1 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 1 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.6 + 0.69 => 0.7 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 2 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 10 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 1.9999 + -1.9999 => -1.9999 + 0.0001 => 0.0001 + -0.0001 => -0.0001 + +mode: PHP_ROUND_HALF_ODD + precision: 0 + 2.5 => 3 + -2.5 => -3 + 3.5 => 4 + -3.5 => -4 + 7 => 7 + -7 => -7 + 0.61 => 1 + 0.69 => 1 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 1 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.6 + 0.69 => 0.7 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 2 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 2 + -1.9999 => -2 + 0.0001 => 0 + -0.0001 => -0 + + precision: 10 + 2.5 => 2.5 + -2.5 => -2.5 + 3.5 => 3.5 + -3.5 => -3.5 + 7 => 7 + -7 => -7 + 0.61 => 0.61 + 0.69 => 0.69 + 0 => 0 + 1.9999 => 1.9999 + -1.9999 => -1.9999 + 0.0001 => 0.0001 + -0.0001 => -0.0001