public function format(DateTimePrintContext $context, &$buf) { $value = $context->getValueField($this->field); if ($value === null) { return false; } $decimalStyle = $context->getDecimalStyle(); $fraction = $this->convertToFraction($value); if (gmp_cmp($fraction, 0) === 0) { // scale is zero if value is zero if ($this->minWidth > 0) { if ($this->decimalPoint) { $buf .= $decimalStyle->getDecimalSeparator(); } for ($i = 0; $i < $this->minWidth; $i++) { $buf .= $decimalStyle->getZeroDigit(); } } } else { $outputScale = Math::min(Math::max(9, $this->minWidth), $this->maxWidth); if ($outputScale !== 9) { $div = 1 . str_repeat('0', 9 - $outputScale); $fraction = gmp_div($fraction, $div); } $str = gmp_strval($fraction); $pad = $outputScale - strlen($str); $str = str_repeat('0', $pad) . $str; // trim trailing zeros while (strlen($str) > $this->minWidth && $str[strlen($str) - 1] === '0') { $str = substr($str, 0, strlen($str) - 1); } $str = $decimalStyle->convertNumberToI18N($str); if ($this->decimalPoint) { $buf .= $decimalStyle->getDecimalSeparator(); } $buf .= $str; } return true; }