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;
 }