ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
Floor.php
Go to the documentation of this file.
1 <?php
2 
4 
7 
8 class 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) {
34  self::floorCheck1Arg();
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);
66  $mode = Helpers::validateNumericNullSubstitution($mode, null);
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 }
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
static floorMathTest(float $number, float $significance, int $mode)
Let FLOORMATH complexity pass Scrutinizer.
Definition: Floor.php:139
static argumentsOk(float $number, float $significance)
Avoid Scrutinizer problems concerning complexity.
Definition: Floor.php:149
static floor($number, $significance=null)
FLOOR.
Definition: Floor.php:31
static math($number, $significance=null, $mode=0)
FLOOR.MATH.
Definition: Floor.php:61
static argumentsOkPrecise(float $number, float $significance)
Avoid Scrutinizer problems concerning complexity.
Definition: Floor.php:104
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 getCompatibilityMode()
Return the current Compatibility Mode.
Definition: Functions.php:93