docs: @Override
      public void print(MoneyPrintContext context, Appendable appendable, BigMoney money) throws IOException {
          MoneyAmountStyle activeStyle = style.localize(context.getLocale());
          if (money.isNegative()) {
              money = money.negated();
              if (!activeStyle.isAbsValue()) {
                  appendable.append(activeStyle.getNegativeSignCharacter());
              }
          }
          String str = money.getAmount().toPlainString();
          char zeroChar = activeStyle.getZeroCharacter();
          if (zeroChar != '0') {
              int diff = zeroChar - '0';
              StringBuilder zeroConvert = new StringBuilder(str);
              for (int i = 0; i < str.length(); i++) {
                  char ch = str.charAt(i);
                  if (ch >= '0' && ch <= '9') {
                      zeroConvert.setCharAt(i, (char) (ch + diff));
                  }
              }
              str = zeroConvert.toString();
          }
          final int decPoint = str.indexOf('.');
          final int afterDecPoint = decPoint + 1;
          if (activeStyle.getGroupingStyle() == GroupingStyle.NONE) {
              if (decPoint < 0) {
                  appendable.append(str);
                  if (activeStyle.isForcedDecimalPoint()) {
                      appendable.append(activeStyle.getDecimalPointCharacter());
                  }
              } else {
                  appendable.append(str.subSequence(0, decPoint))
                      .append(activeStyle.getDecimalPointCharacter()).append(str.substring(afterDecPoint));
              }
          } else {
              int groupingSize = activeStyle.getGroupingSize();
              int extendedGroupingSize = activeStyle.getExtendedGroupingSize();
              extendedGroupingSize = extendedGroupingSize == 0 ? groupingSize : extendedGroupingSize;
              char groupingChar = activeStyle.getGroupingCharacter();
              int pre = (decPoint < 0 ? str.length() : decPoint);
              int post = (decPoint < 0 ? 0 : str.length() - decPoint - 1);
              appendable.append(str.charAt(0));
              for (int i = 1; i < pre; i++) {
                  if (isPreGroupingPoint(pre - i, groupingSize, extendedGroupingSize)) {
                      appendable.append(groupingChar);
                  }
                  appendable.append(str.charAt(i));
              }
              if (decPoint >= 0 || activeStyle.isForcedDecimalPoint()) {
                  appendable.append(activeStyle.getDecimalPointCharacter());
              }
              if (activeStyle.getGroupingStyle() == GroupingStyle.BEFORE_DECIMAL_POINT) {
                  if (decPoint >= 0) {
                      appendable.append(str.substring(afterDecPoint));
                  }
              } else {
                  for (int i = 0; i < post; i++) {
                      appendable.append(str.charAt(i + afterDecPoint));
                      if (isPostGroupingPoint(i, post, groupingSize, extendedGroupingSize)) {
                          appendable.append(groupingChar);
                      }
                  }
              }
          }
      }