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  {
11  $format = self::stripQuotes($format);
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 }
$format
Definition: metadata.php:141