ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
FractionFormatter.php
Go to the documentation of this file.
1<?php
2
4
6
8{
9 public static function format($value, string $format): string
10 {
12
13 $sign = ($value < 0.0) ? '-' : '';
14
15 $integerPart = floor(abs($value));
16 $decimalPart = trim(fmod(abs($value), 1), '0.');
17 $decimalLength = strlen($decimalPart);
18 $decimalDivisor = 10 ** $decimalLength;
19
20 $GCD = MathTrig\Gcd::evaluate($decimalPart, $decimalDivisor);
21
22 $adjustedDecimalPart = $decimalPart / $GCD;
23 $adjustedDecimalDivisor = $decimalDivisor / $GCD;
24
25 if ((strpos($format, '0') !== false)) {
26 return "{$sign}{$integerPart} {$adjustedDecimalPart}/{$adjustedDecimalDivisor}";
27 } elseif ((strpos($format, '#') !== false)) {
28 if ($integerPart == 0) {
29 return "{$sign}{$adjustedDecimalPart}/{$adjustedDecimalDivisor}";
30 }
31
32 return "{$sign}{$integerPart} {$adjustedDecimalPart}/{$adjustedDecimalDivisor}";
33 } elseif ((substr($format, 0, 3) == '? ?')) {
34 if ($integerPart == 0) {
35 $integerPart = '';
36 }
37
38 return "{$sign}{$integerPart} {$adjustedDecimalPart}/{$adjustedDecimalDivisor}";
39 }
40
41 $adjustedDecimalPart += $integerPart * $adjustedDecimalDivisor;
42
43 return "{$sign}{$adjustedDecimalPart}/{$adjustedDecimalDivisor}";
44 }
45}
An exception for terminatinating execution or to throw for unit testing.
$format
Definition: metadata.php:141