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 "PositiveInfinity" => RoundingMode::PositiveInfinity, 11 "NegativeInfinity" => RoundingMode::NegativeInfinity, 12 "TowardsZero" => RoundingMode::TowardsZero, 13 "AwayFromZero" => RoundingMode::AwayFromZero, 14]; 15 16$numbers = [ 17 2.5, 18 -2.5, 19 3.5, 20 -3.5, 21 7, 22 -7, 23 15.51, 24 -15.51, 25 5, 26 -5, 27 0.61, 28 0.69, 29 0.65, 30 -0.65, 31 1.9999, 32 -1.9999, 33 0.0001, 34 -0.0001, 35]; 36$precisions = [-1, 0, 1, 2, 10]; 37 38foreach ($modes as $modeKey => $mode) { 39 echo "mode: $modeKey\n"; 40 foreach ($precisions as $precision) { 41 echo "\tprecision: $precision\n"; 42 foreach ($numbers as $number) { 43 $result = round($number, $precision, $mode); 44 echo "\t\t" . 45 str_pad($number, 7, " ", STR_PAD_LEFT) . 46 " => $result\n"; 47 } 48 echo "\n"; 49 } 50} 51 52?> 53--EXPECT-- 54mode: PHP_ROUND_HALF_UP 55 precision: -1 56 2.5 => 0 57 -2.5 => -0 58 3.5 => 0 59 -3.5 => -0 60 7 => 10 61 -7 => -10 62 15.51 => 20 63 -15.51 => -20 64 5 => 10 65 -5 => -10 66 0.61 => 0 67 0.69 => 0 68 0.65 => 0 69 -0.65 => -0 70 1.9999 => 0 71 -1.9999 => -0 72 0.0001 => 0 73 -0.0001 => -0 74 75 precision: 0 76 2.5 => 3 77 -2.5 => -3 78 3.5 => 4 79 -3.5 => -4 80 7 => 7 81 -7 => -7 82 15.51 => 16 83 -15.51 => -16 84 5 => 5 85 -5 => -5 86 0.61 => 1 87 0.69 => 1 88 0.65 => 1 89 -0.65 => -1 90 1.9999 => 2 91 -1.9999 => -2 92 0.0001 => 0 93 -0.0001 => -0 94 95 precision: 1 96 2.5 => 2.5 97 -2.5 => -2.5 98 3.5 => 3.5 99 -3.5 => -3.5 100 7 => 7 101 -7 => -7 102 15.51 => 15.5 103 -15.51 => -15.5 104 5 => 5 105 -5 => -5 106 0.61 => 0.6 107 0.69 => 0.7 108 0.65 => 0.7 109 -0.65 => -0.7 110 1.9999 => 2 111 -1.9999 => -2 112 0.0001 => 0 113 -0.0001 => -0 114 115 precision: 2 116 2.5 => 2.5 117 -2.5 => -2.5 118 3.5 => 3.5 119 -3.5 => -3.5 120 7 => 7 121 -7 => -7 122 15.51 => 15.51 123 -15.51 => -15.51 124 5 => 5 125 -5 => -5 126 0.61 => 0.61 127 0.69 => 0.69 128 0.65 => 0.65 129 -0.65 => -0.65 130 1.9999 => 2 131 -1.9999 => -2 132 0.0001 => 0 133 -0.0001 => -0 134 135 precision: 10 136 2.5 => 2.5 137 -2.5 => -2.5 138 3.5 => 3.5 139 -3.5 => -3.5 140 7 => 7 141 -7 => -7 142 15.51 => 15.51 143 -15.51 => -15.51 144 5 => 5 145 -5 => -5 146 0.61 => 0.61 147 0.69 => 0.69 148 0.65 => 0.65 149 -0.65 => -0.65 150 1.9999 => 1.9999 151 -1.9999 => -1.9999 152 0.0001 => 0.0001 153 -0.0001 => -0.0001 154 155mode: PHP_ROUND_HALF_DOWN 156 precision: -1 157 2.5 => 0 158 -2.5 => -0 159 3.5 => 0 160 -3.5 => -0 161 7 => 10 162 -7 => -10 163 15.51 => 20 164 -15.51 => -20 165 5 => 0 166 -5 => -0 167 0.61 => 0 168 0.69 => 0 169 0.65 => 0 170 -0.65 => -0 171 1.9999 => 0 172 -1.9999 => -0 173 0.0001 => 0 174 -0.0001 => -0 175 176 precision: 0 177 2.5 => 2 178 -2.5 => -2 179 3.5 => 3 180 -3.5 => -3 181 7 => 7 182 -7 => -7 183 15.51 => 16 184 -15.51 => -16 185 5 => 5 186 -5 => -5 187 0.61 => 1 188 0.69 => 1 189 0.65 => 1 190 -0.65 => -1 191 1.9999 => 2 192 -1.9999 => -2 193 0.0001 => 0 194 -0.0001 => -0 195 196 precision: 1 197 2.5 => 2.5 198 -2.5 => -2.5 199 3.5 => 3.5 200 -3.5 => -3.5 201 7 => 7 202 -7 => -7 203 15.51 => 15.5 204 -15.51 => -15.5 205 5 => 5 206 -5 => -5 207 0.61 => 0.6 208 0.69 => 0.7 209 0.65 => 0.6 210 -0.65 => -0.6 211 1.9999 => 2 212 -1.9999 => -2 213 0.0001 => 0 214 -0.0001 => -0 215 216 precision: 2 217 2.5 => 2.5 218 -2.5 => -2.5 219 3.5 => 3.5 220 -3.5 => -3.5 221 7 => 7 222 -7 => -7 223 15.51 => 15.51 224 -15.51 => -15.51 225 5 => 5 226 -5 => -5 227 0.61 => 0.61 228 0.69 => 0.69 229 0.65 => 0.65 230 -0.65 => -0.65 231 1.9999 => 2 232 -1.9999 => -2 233 0.0001 => 0 234 -0.0001 => -0 235 236 precision: 10 237 2.5 => 2.5 238 -2.5 => -2.5 239 3.5 => 3.5 240 -3.5 => -3.5 241 7 => 7 242 -7 => -7 243 15.51 => 15.51 244 -15.51 => -15.51 245 5 => 5 246 -5 => -5 247 0.61 => 0.61 248 0.69 => 0.69 249 0.65 => 0.65 250 -0.65 => -0.65 251 1.9999 => 1.9999 252 -1.9999 => -1.9999 253 0.0001 => 0.0001 254 -0.0001 => -0.0001 255 256mode: PHP_ROUND_HALF_EVEN 257 precision: -1 258 2.5 => 0 259 -2.5 => -0 260 3.5 => 0 261 -3.5 => -0 262 7 => 10 263 -7 => -10 264 15.51 => 20 265 -15.51 => -20 266 5 => 0 267 -5 => -0 268 0.61 => 0 269 0.69 => 0 270 0.65 => 0 271 -0.65 => -0 272 1.9999 => 0 273 -1.9999 => -0 274 0.0001 => 0 275 -0.0001 => -0 276 277 precision: 0 278 2.5 => 2 279 -2.5 => -2 280 3.5 => 4 281 -3.5 => -4 282 7 => 7 283 -7 => -7 284 15.51 => 16 285 -15.51 => -16 286 5 => 5 287 -5 => -5 288 0.61 => 1 289 0.69 => 1 290 0.65 => 1 291 -0.65 => -1 292 1.9999 => 2 293 -1.9999 => -2 294 0.0001 => 0 295 -0.0001 => -0 296 297 precision: 1 298 2.5 => 2.5 299 -2.5 => -2.5 300 3.5 => 3.5 301 -3.5 => -3.5 302 7 => 7 303 -7 => -7 304 15.51 => 15.5 305 -15.51 => -15.5 306 5 => 5 307 -5 => -5 308 0.61 => 0.6 309 0.69 => 0.7 310 0.65 => 0.6 311 -0.65 => -0.6 312 1.9999 => 2 313 -1.9999 => -2 314 0.0001 => 0 315 -0.0001 => -0 316 317 precision: 2 318 2.5 => 2.5 319 -2.5 => -2.5 320 3.5 => 3.5 321 -3.5 => -3.5 322 7 => 7 323 -7 => -7 324 15.51 => 15.51 325 -15.51 => -15.51 326 5 => 5 327 -5 => -5 328 0.61 => 0.61 329 0.69 => 0.69 330 0.65 => 0.65 331 -0.65 => -0.65 332 1.9999 => 2 333 -1.9999 => -2 334 0.0001 => 0 335 -0.0001 => -0 336 337 precision: 10 338 2.5 => 2.5 339 -2.5 => -2.5 340 3.5 => 3.5 341 -3.5 => -3.5 342 7 => 7 343 -7 => -7 344 15.51 => 15.51 345 -15.51 => -15.51 346 5 => 5 347 -5 => -5 348 0.61 => 0.61 349 0.69 => 0.69 350 0.65 => 0.65 351 -0.65 => -0.65 352 1.9999 => 1.9999 353 -1.9999 => -1.9999 354 0.0001 => 0.0001 355 -0.0001 => -0.0001 356 357mode: PHP_ROUND_HALF_ODD 358 precision: -1 359 2.5 => 0 360 -2.5 => -0 361 3.5 => 0 362 -3.5 => -0 363 7 => 10 364 -7 => -10 365 15.51 => 20 366 -15.51 => -20 367 5 => 10 368 -5 => -10 369 0.61 => 0 370 0.69 => 0 371 0.65 => 0 372 -0.65 => -0 373 1.9999 => 0 374 -1.9999 => -0 375 0.0001 => 0 376 -0.0001 => -0 377 378 precision: 0 379 2.5 => 3 380 -2.5 => -3 381 3.5 => 3 382 -3.5 => -3 383 7 => 7 384 -7 => -7 385 15.51 => 16 386 -15.51 => -16 387 5 => 5 388 -5 => -5 389 0.61 => 1 390 0.69 => 1 391 0.65 => 1 392 -0.65 => -1 393 1.9999 => 2 394 -1.9999 => -2 395 0.0001 => 0 396 -0.0001 => -0 397 398 precision: 1 399 2.5 => 2.5 400 -2.5 => -2.5 401 3.5 => 3.5 402 -3.5 => -3.5 403 7 => 7 404 -7 => -7 405 15.51 => 15.5 406 -15.51 => -15.5 407 5 => 5 408 -5 => -5 409 0.61 => 0.6 410 0.69 => 0.7 411 0.65 => 0.7 412 -0.65 => -0.7 413 1.9999 => 2 414 -1.9999 => -2 415 0.0001 => 0 416 -0.0001 => -0 417 418 precision: 2 419 2.5 => 2.5 420 -2.5 => -2.5 421 3.5 => 3.5 422 -3.5 => -3.5 423 7 => 7 424 -7 => -7 425 15.51 => 15.51 426 -15.51 => -15.51 427 5 => 5 428 -5 => -5 429 0.61 => 0.61 430 0.69 => 0.69 431 0.65 => 0.65 432 -0.65 => -0.65 433 1.9999 => 2 434 -1.9999 => -2 435 0.0001 => 0 436 -0.0001 => -0 437 438 precision: 10 439 2.5 => 2.5 440 -2.5 => -2.5 441 3.5 => 3.5 442 -3.5 => -3.5 443 7 => 7 444 -7 => -7 445 15.51 => 15.51 446 -15.51 => -15.51 447 5 => 5 448 -5 => -5 449 0.61 => 0.61 450 0.69 => 0.69 451 0.65 => 0.65 452 -0.65 => -0.65 453 1.9999 => 1.9999 454 -1.9999 => -1.9999 455 0.0001 => 0.0001 456 -0.0001 => -0.0001 457 458mode: PositiveInfinity 459 precision: -1 460 2.5 => 10 461 -2.5 => -0 462 3.5 => 10 463 -3.5 => -0 464 7 => 10 465 -7 => -0 466 15.51 => 20 467 -15.51 => -10 468 5 => 10 469 -5 => -0 470 0.61 => 10 471 0.69 => 10 472 0.65 => 10 473 -0.65 => -0 474 1.9999 => 10 475 -1.9999 => -0 476 0.0001 => 10 477 -0.0001 => -0 478 479 precision: 0 480 2.5 => 3 481 -2.5 => -2 482 3.5 => 4 483 -3.5 => -3 484 7 => 7 485 -7 => -7 486 15.51 => 16 487 -15.51 => -15 488 5 => 5 489 -5 => -5 490 0.61 => 1 491 0.69 => 1 492 0.65 => 1 493 -0.65 => -0 494 1.9999 => 2 495 -1.9999 => -1 496 0.0001 => 1 497 -0.0001 => -0 498 499 precision: 1 500 2.5 => 2.5 501 -2.5 => -2.5 502 3.5 => 3.5 503 -3.5 => -3.5 504 7 => 7 505 -7 => -7 506 15.51 => 15.6 507 -15.51 => -15.5 508 5 => 5 509 -5 => -5 510 0.61 => 0.7 511 0.69 => 0.7 512 0.65 => 0.7 513 -0.65 => -0.6 514 1.9999 => 2 515 -1.9999 => -1.9 516 0.0001 => 0.1 517 -0.0001 => -0 518 519 precision: 2 520 2.5 => 2.5 521 -2.5 => -2.5 522 3.5 => 3.5 523 -3.5 => -3.5 524 7 => 7 525 -7 => -7 526 15.51 => 15.51 527 -15.51 => -15.51 528 5 => 5 529 -5 => -5 530 0.61 => 0.61 531 0.69 => 0.69 532 0.65 => 0.65 533 -0.65 => -0.65 534 1.9999 => 2 535 -1.9999 => -1.99 536 0.0001 => 0.01 537 -0.0001 => -0 538 539 precision: 10 540 2.5 => 2.5 541 -2.5 => -2.5 542 3.5 => 3.5 543 -3.5 => -3.5 544 7 => 7 545 -7 => -7 546 15.51 => 15.51 547 -15.51 => -15.51 548 5 => 5 549 -5 => -5 550 0.61 => 0.61 551 0.69 => 0.69 552 0.65 => 0.65 553 -0.65 => -0.65 554 1.9999 => 1.9999 555 -1.9999 => -1.9999 556 0.0001 => 0.0001 557 -0.0001 => -0.0001 558 559mode: NegativeInfinity 560 precision: -1 561 2.5 => 0 562 -2.5 => -10 563 3.5 => 0 564 -3.5 => -10 565 7 => 0 566 -7 => -10 567 15.51 => 10 568 -15.51 => -20 569 5 => 0 570 -5 => -10 571 0.61 => 0 572 0.69 => 0 573 0.65 => 0 574 -0.65 => -10 575 1.9999 => 0 576 -1.9999 => -10 577 0.0001 => 0 578 -0.0001 => -10 579 580 precision: 0 581 2.5 => 2 582 -2.5 => -3 583 3.5 => 3 584 -3.5 => -4 585 7 => 7 586 -7 => -7 587 15.51 => 15 588 -15.51 => -16 589 5 => 5 590 -5 => -5 591 0.61 => 0 592 0.69 => 0 593 0.65 => 0 594 -0.65 => -1 595 1.9999 => 1 596 -1.9999 => -2 597 0.0001 => 0 598 -0.0001 => -1 599 600 precision: 1 601 2.5 => 2.5 602 -2.5 => -2.5 603 3.5 => 3.5 604 -3.5 => -3.5 605 7 => 7 606 -7 => -7 607 15.51 => 15.5 608 -15.51 => -15.6 609 5 => 5 610 -5 => -5 611 0.61 => 0.6 612 0.69 => 0.6 613 0.65 => 0.6 614 -0.65 => -0.7 615 1.9999 => 1.9 616 -1.9999 => -2 617 0.0001 => 0 618 -0.0001 => -0.1 619 620 precision: 2 621 2.5 => 2.5 622 -2.5 => -2.5 623 3.5 => 3.5 624 -3.5 => -3.5 625 7 => 7 626 -7 => -7 627 15.51 => 15.51 628 -15.51 => -15.51 629 5 => 5 630 -5 => -5 631 0.61 => 0.61 632 0.69 => 0.69 633 0.65 => 0.65 634 -0.65 => -0.65 635 1.9999 => 1.99 636 -1.9999 => -2 637 0.0001 => 0 638 -0.0001 => -0.01 639 640 precision: 10 641 2.5 => 2.5 642 -2.5 => -2.5 643 3.5 => 3.5 644 -3.5 => -3.5 645 7 => 7 646 -7 => -7 647 15.51 => 15.51 648 -15.51 => -15.51 649 5 => 5 650 -5 => -5 651 0.61 => 0.61 652 0.69 => 0.69 653 0.65 => 0.65 654 -0.65 => -0.65 655 1.9999 => 1.9999 656 -1.9999 => -1.9999 657 0.0001 => 0.0001 658 -0.0001 => -0.0001 659 660mode: TowardsZero 661 precision: -1 662 2.5 => 0 663 -2.5 => -0 664 3.5 => 0 665 -3.5 => -0 666 7 => 0 667 -7 => -0 668 15.51 => 10 669 -15.51 => -10 670 5 => 0 671 -5 => -0 672 0.61 => 0 673 0.69 => 0 674 0.65 => 0 675 -0.65 => -0 676 1.9999 => 0 677 -1.9999 => -0 678 0.0001 => 0 679 -0.0001 => -0 680 681 precision: 0 682 2.5 => 2 683 -2.5 => -2 684 3.5 => 3 685 -3.5 => -3 686 7 => 7 687 -7 => -7 688 15.51 => 15 689 -15.51 => -15 690 5 => 5 691 -5 => -5 692 0.61 => 0 693 0.69 => 0 694 0.65 => 0 695 -0.65 => -0 696 1.9999 => 1 697 -1.9999 => -1 698 0.0001 => 0 699 -0.0001 => -0 700 701 precision: 1 702 2.5 => 2.5 703 -2.5 => -2.5 704 3.5 => 3.5 705 -3.5 => -3.5 706 7 => 7 707 -7 => -7 708 15.51 => 15.5 709 -15.51 => -15.5 710 5 => 5 711 -5 => -5 712 0.61 => 0.6 713 0.69 => 0.6 714 0.65 => 0.6 715 -0.65 => -0.6 716 1.9999 => 1.9 717 -1.9999 => -1.9 718 0.0001 => 0 719 -0.0001 => -0 720 721 precision: 2 722 2.5 => 2.5 723 -2.5 => -2.5 724 3.5 => 3.5 725 -3.5 => -3.5 726 7 => 7 727 -7 => -7 728 15.51 => 15.51 729 -15.51 => -15.51 730 5 => 5 731 -5 => -5 732 0.61 => 0.61 733 0.69 => 0.69 734 0.65 => 0.65 735 -0.65 => -0.65 736 1.9999 => 1.99 737 -1.9999 => -1.99 738 0.0001 => 0 739 -0.0001 => -0 740 741 precision: 10 742 2.5 => 2.5 743 -2.5 => -2.5 744 3.5 => 3.5 745 -3.5 => -3.5 746 7 => 7 747 -7 => -7 748 15.51 => 15.51 749 -15.51 => -15.51 750 5 => 5 751 -5 => -5 752 0.61 => 0.61 753 0.69 => 0.69 754 0.65 => 0.65 755 -0.65 => -0.65 756 1.9999 => 1.9999 757 -1.9999 => -1.9999 758 0.0001 => 0.0001 759 -0.0001 => -0.0001 760 761mode: AwayFromZero 762 precision: -1 763 2.5 => 10 764 -2.5 => -10 765 3.5 => 10 766 -3.5 => -10 767 7 => 10 768 -7 => -10 769 15.51 => 20 770 -15.51 => -20 771 5 => 10 772 -5 => -10 773 0.61 => 10 774 0.69 => 10 775 0.65 => 10 776 -0.65 => -10 777 1.9999 => 10 778 -1.9999 => -10 779 0.0001 => 10 780 -0.0001 => -10 781 782 precision: 0 783 2.5 => 3 784 -2.5 => -3 785 3.5 => 4 786 -3.5 => -4 787 7 => 7 788 -7 => -7 789 15.51 => 16 790 -15.51 => -16 791 5 => 5 792 -5 => -5 793 0.61 => 1 794 0.69 => 1 795 0.65 => 1 796 -0.65 => -1 797 1.9999 => 2 798 -1.9999 => -2 799 0.0001 => 1 800 -0.0001 => -1 801 802 precision: 1 803 2.5 => 2.5 804 -2.5 => -2.5 805 3.5 => 3.5 806 -3.5 => -3.5 807 7 => 7 808 -7 => -7 809 15.51 => 15.6 810 -15.51 => -15.6 811 5 => 5 812 -5 => -5 813 0.61 => 0.7 814 0.69 => 0.7 815 0.65 => 0.7 816 -0.65 => -0.7 817 1.9999 => 2 818 -1.9999 => -2 819 0.0001 => 0.1 820 -0.0001 => -0.1 821 822 precision: 2 823 2.5 => 2.5 824 -2.5 => -2.5 825 3.5 => 3.5 826 -3.5 => -3.5 827 7 => 7 828 -7 => -7 829 15.51 => 15.51 830 -15.51 => -15.51 831 5 => 5 832 -5 => -5 833 0.61 => 0.61 834 0.69 => 0.69 835 0.65 => 0.65 836 -0.65 => -0.65 837 1.9999 => 2 838 -1.9999 => -2 839 0.0001 => 0.01 840 -0.0001 => -0.01 841 842 precision: 10 843 2.5 => 2.5 844 -2.5 => -2.5 845 3.5 => 3.5 846 -3.5 => -3.5 847 7 => 7 848 -7 => -7 849 15.51 => 15.51 850 -15.51 => -15.51 851 5 => 5 852 -5 => -5 853 0.61 => 0.61 854 0.69 => 0.69 855 0.65 => 0.65 856 -0.65 => -0.65 857 1.9999 => 1.9999 858 -1.9999 => -1.9999 859 0.0001 => 0.0001 860 -0.0001 => -0.0001 861