ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
Floor.php
Go to the documentation of this file.
1<?php
2
4
7
8class Floor
9{
10 private static function floorCheck1Arg(): void
11 {
12 $compatibility = Functions::getCompatibilityMode();
13 if ($compatibility === Functions::COMPATIBILITY_EXCEL) {
14 throw new Exception('Excel requires 2 arguments for FLOOR');
15 }
16 }
17
31 public static function floor($number, $significance = null)
32 {
33 if ($significance === null) {
35 }
36
37 try {
38 $number = Helpers::validateNumericNullBool($number);
39 $significance = Helpers::validateNumericNullSubstitution($significance, ($number < 0) ? -1 : 1);
40 } catch (Exception $e) {
41 return $e->getMessage();
42 }
43
44 return self::argumentsOk((float) $number, (float) $significance);
45 }
46
61 public static function math($number, $significance = null, $mode = 0)
62 {
63 try {
64 $number = Helpers::validateNumericNullBool($number);
65 $significance = Helpers::validateNumericNullSubstitution($significance, ($number < 0) ? -1 : 1);
67 } catch (Exception $e) {
68 return $e->getMessage();
69 }
70
71 return self::argsOk((float) $number, (float) $significance, (int) $mode);
72 }
73
87 public static function precise($number, $significance = 1)
88 {
89 try {
90 $number = Helpers::validateNumericNullBool($number);
91 $significance = Helpers::validateNumericNullSubstitution($significance, null);
92 } catch (Exception $e) {
93 return $e->getMessage();
94 }
95
96 return self::argumentsOkPrecise((float) $number, (float) $significance);
97 }
98
104 private static function argumentsOkPrecise(float $number, float $significance)
105 {
106 if ($significance == 0.0) {
107 return Functions::DIV0();
108 }
109 if ($number == 0.0) {
110 return 0.0;
111 }
112
113 return floor($number / abs($significance)) * abs($significance);
114 }
115
121 private static function argsOk(float $number, float $significance, int $mode)
122 {
123 if (!$significance) {
124 return Functions::DIV0();
125 }
126 if (!$number) {
127 return 0.0;
128 }
129 if (self::floorMathTest($number, $significance, $mode)) {
130 return ceil($number / $significance) * $significance;
131 }
132
133 return floor($number / $significance) * $significance;
134 }
135
139 private static function floorMathTest(float $number, float $significance, int $mode): bool
140 {
141 return Helpers::returnSign($significance) == -1 || (Helpers::returnSign($number) == -1 && !empty($mode));
142 }
143
149 private static function argumentsOk(float $number, float $significance)
150 {
151 if ($significance == 0.0) {
152 return Functions::DIV0();
153 }
154 if ($number == 0.0) {
155 return 0.0;
156 }
157 if (Helpers::returnSign($significance) == 1) {
158 return floor($number / $significance) * $significance;
159 }
160 if (Helpers::returnSign($number) == -1 && Helpers::returnSign($significance) == -1) {
161 return floor($number / $significance) * $significance;
162 }
163
164 return Functions::NAN();
165 }
166}
An exception for terminatinating execution or to throw for unit testing.
static getCompatibilityMode()
Return the current Compatibility Mode.
Definition: Functions.php:93
static argsOk(float $number, float $significance, int $mode)
Avoid Scrutinizer complexity problems.
Definition: Floor.php:121
static precise($number, $significance=1)
FLOOR.PRECISE.
Definition: Floor.php:87
static floor($number, $significance=null)
FLOOR.
Definition: Floor.php:31
static argumentsOkPrecise(float $number, float $significance)
Avoid Scrutinizer problems concerning complexity.
Definition: Floor.php:104
static argumentsOk(float $number, float $significance)
Avoid Scrutinizer problems concerning complexity.
Definition: Floor.php:149
static floorMathTest(float $number, float $significance, int $mode)
Let FLOORMATH complexity pass Scrutinizer.
Definition: Floor.php:139
static math($number, $significance=null, $mode=0)
FLOOR.MATH.
Definition: Floor.php:61
static validateNumericNullBool($number)
Many functions accept null/false/true argument treated as 0/0/1.
Definition: Helpers.php:27
static validateNumericNullSubstitution($number, $substitute)
Validate numeric, but allow substitute for null.
Definition: Helpers.php:51