1--TEST-- 2round() with different rounding modes 3--FILE-- 4<?php 5$modes = [ 6 "PHP_ROUND_HALF_UP" => PHP_ROUND_HALF_UP, 7 "PHP_ROUND_HALF_DOWN" => PHP_ROUND_HALF_DOWN, 8 "PHP_ROUND_HALF_EVEN" => PHP_ROUND_HALF_EVEN, 9 "PHP_ROUND_HALF_ODD" => PHP_ROUND_HALF_ODD, 10]; 11 12$numbers = [ 13 2.5, 14 -2.5, 15 3.5, 16 -3.5, 17 7, 18 -7, 19 0.61, 20 0.69, 21 0, 22 1.9999, 23 -1.9999, 24 0.0001, 25 -0.0001, 26]; 27$precisions = [0, 1, 2, 10]; 28 29foreach ($modes as $modeKey => $mode) { 30 echo "mode: $modeKey\n"; 31 foreach ($precisions as $precision) { 32 echo "\tprecision: $precision\n"; 33 foreach ($numbers as $number) { 34 $result = round($number, $precision, $mode); 35 echo "\t\t" . 36 str_pad($number, 7, " ", STR_PAD_LEFT) . 37 " => $result\n"; 38 } 39 echo "\n"; 40 } 41} 42 43?> 44--EXPECT-- 45mode: PHP_ROUND_HALF_UP 46 precision: 0 47 2.5 => 3 48 -2.5 => -3 49 3.5 => 4 50 -3.5 => -4 51 7 => 7 52 -7 => -7 53 0.61 => 1 54 0.69 => 1 55 0 => 0 56 1.9999 => 2 57 -1.9999 => -2 58 0.0001 => 0 59 -0.0001 => -0 60 61 precision: 1 62 2.5 => 2.5 63 -2.5 => -2.5 64 3.5 => 3.5 65 -3.5 => -3.5 66 7 => 7 67 -7 => -7 68 0.61 => 0.6 69 0.69 => 0.7 70 0 => 0 71 1.9999 => 2 72 -1.9999 => -2 73 0.0001 => 0 74 -0.0001 => -0 75 76 precision: 2 77 2.5 => 2.5 78 -2.5 => -2.5 79 3.5 => 3.5 80 -3.5 => -3.5 81 7 => 7 82 -7 => -7 83 0.61 => 0.61 84 0.69 => 0.69 85 0 => 0 86 1.9999 => 2 87 -1.9999 => -2 88 0.0001 => 0 89 -0.0001 => -0 90 91 precision: 10 92 2.5 => 2.5 93 -2.5 => -2.5 94 3.5 => 3.5 95 -3.5 => -3.5 96 7 => 7 97 -7 => -7 98 0.61 => 0.61 99 0.69 => 0.69 100 0 => 0 101 1.9999 => 1.9999 102 -1.9999 => -1.9999 103 0.0001 => 0.0001 104 -0.0001 => -0.0001 105 106mode: PHP_ROUND_HALF_DOWN 107 precision: 0 108 2.5 => 2 109 -2.5 => -2 110 3.5 => 3 111 -3.5 => -3 112 7 => 7 113 -7 => -7 114 0.61 => 1 115 0.69 => 1 116 0 => 0 117 1.9999 => 2 118 -1.9999 => -2 119 0.0001 => 0 120 -0.0001 => -0 121 122 precision: 1 123 2.5 => 2.5 124 -2.5 => -2.5 125 3.5 => 3.5 126 -3.5 => -3.5 127 7 => 7 128 -7 => -7 129 0.61 => 0.6 130 0.69 => 0.7 131 0 => 0 132 1.9999 => 2 133 -1.9999 => -2 134 0.0001 => 0 135 -0.0001 => -0 136 137 precision: 2 138 2.5 => 2.5 139 -2.5 => -2.5 140 3.5 => 3.5 141 -3.5 => -3.5 142 7 => 7 143 -7 => -7 144 0.61 => 0.61 145 0.69 => 0.69 146 0 => 0 147 1.9999 => 2 148 -1.9999 => -2 149 0.0001 => 0 150 -0.0001 => -0 151 152 precision: 10 153 2.5 => 2.5 154 -2.5 => -2.5 155 3.5 => 3.5 156 -3.5 => -3.5 157 7 => 7 158 -7 => -7 159 0.61 => 0.61 160 0.69 => 0.69 161 0 => 0 162 1.9999 => 1.9999 163 -1.9999 => -1.9999 164 0.0001 => 0.0001 165 -0.0001 => -0.0001 166 167mode: PHP_ROUND_HALF_EVEN 168 precision: 0 169 2.5 => 2 170 -2.5 => -2 171 3.5 => 4 172 -3.5 => -4 173 7 => 7 174 -7 => -7 175 0.61 => 1 176 0.69 => 1 177 0 => 0 178 1.9999 => 2 179 -1.9999 => -2 180 0.0001 => 0 181 -0.0001 => -0 182 183 precision: 1 184 2.5 => 2.5 185 -2.5 => -2.5 186 3.5 => 3.5 187 -3.5 => -3.5 188 7 => 7 189 -7 => -7 190 0.61 => 0.6 191 0.69 => 0.7 192 0 => 0 193 1.9999 => 2 194 -1.9999 => -2 195 0.0001 => 0 196 -0.0001 => -0 197 198 precision: 2 199 2.5 => 2.5 200 -2.5 => -2.5 201 3.5 => 3.5 202 -3.5 => -3.5 203 7 => 7 204 -7 => -7 205 0.61 => 0.61 206 0.69 => 0.69 207 0 => 0 208 1.9999 => 2 209 -1.9999 => -2 210 0.0001 => 0 211 -0.0001 => -0 212 213 precision: 10 214 2.5 => 2.5 215 -2.5 => -2.5 216 3.5 => 3.5 217 -3.5 => -3.5 218 7 => 7 219 -7 => -7 220 0.61 => 0.61 221 0.69 => 0.69 222 0 => 0 223 1.9999 => 1.9999 224 -1.9999 => -1.9999 225 0.0001 => 0.0001 226 -0.0001 => -0.0001 227 228mode: PHP_ROUND_HALF_ODD 229 precision: 0 230 2.5 => 3 231 -2.5 => -3 232 3.5 => 3 233 -3.5 => -3 234 7 => 7 235 -7 => -7 236 0.61 => 1 237 0.69 => 1 238 0 => 0 239 1.9999 => 2 240 -1.9999 => -2 241 0.0001 => 0 242 -0.0001 => -0 243 244 precision: 1 245 2.5 => 2.5 246 -2.5 => -2.5 247 3.5 => 3.5 248 -3.5 => -3.5 249 7 => 7 250 -7 => -7 251 0.61 => 0.6 252 0.69 => 0.7 253 0 => 0 254 1.9999 => 2 255 -1.9999 => -2 256 0.0001 => 0 257 -0.0001 => -0 258 259 precision: 2 260 2.5 => 2.5 261 -2.5 => -2.5 262 3.5 => 3.5 263 -3.5 => -3.5 264 7 => 7 265 -7 => -7 266 0.61 => 0.61 267 0.69 => 0.69 268 0 => 0 269 1.9999 => 2 270 -1.9999 => -2 271 0.0001 => 0 272 -0.0001 => -0 273 274 precision: 10 275 2.5 => 2.5 276 -2.5 => -2.5 277 3.5 => 3.5 278 -3.5 => -3.5 279 7 => 7 280 -7 => -7 281 0.61 => 0.61 282 0.69 => 0.69 283 0 => 0 284 1.9999 => 1.9999 285 -1.9999 => -1.9999 286 0.0001 => 0.0001 287 -0.0001 => -0.0001 288