Conditions | 8 |
Paths | 10 |
Total Lines | 34 |
Code Lines | 22 |
Lines | 0 |
Ratio | 0 % |
Tests | 12 |
CRAP Score | 8 |
Changes | 0 |
1 | <?php |
||
24 | 30 | public static function evaluate(array|float|string|null $value = 0, array|int|string $digits = 0): array|float|string |
|
25 | { |
||
26 | 30 | if (is_array($value) || is_array($digits)) { |
|
27 | 5 | return self::evaluateArrayArguments([self::class, __FUNCTION__], $value, $digits); |
|
28 | } |
||
29 | |||
30 | try { |
||
31 | 30 | $value = Helpers::validateNumericNullBool($value); |
|
32 | 28 | $digits = Helpers::validateNumericNullSubstitution($digits, null); |
|
33 | 3 | } catch (Exception $e) { |
|
34 | 3 | return $e->getMessage(); |
|
35 | } |
||
36 | |||
37 | 27 | if ($value == 0) { |
|
38 | return $value; |
||
39 | } |
||
40 | 27 | ||
41 | if ($value >= 0) { |
||
42 | 27 | $minusSign = ''; |
|
43 | 2 | } else { |
|
44 | $minusSign = '-'; |
||
45 | $value = -$value; |
||
46 | 25 | } |
|
47 | $digits = (int) floor($digits); |
||
48 | if ($digits < 0) { |
||
49 | $power = (int) (10 ** -$digits); |
||
50 | $result = intdiv((int) floor($value), $power) * $power; |
||
51 | |||
52 | return ($minusSign === '') ? $result : -$result; |
||
53 | } |
||
54 | $digitsPlus1 = $digits + 1; |
||
55 | $result = substr($minusSign . sprintf("%.{$digitsPlus1}f", $value), 0, -1); |
||
56 | |||
57 | return (float) $result; |
||
58 | } |
||
60 |