code: @Override
      public double doubleValue() {
          if (isNaN()) {
              return Double.NaN;
          }
          if (isInfinite()) {
              if (isNegative()) {
                  return Double.NEGATIVE_INFINITY;
              } else {
                  return Double.POSITIVE_INFINITY;
              }
          }
  
          BigDecimal bigDecimal = bigDecimalValueNoNegativeZeroCheck();
  
          if (hasDifferentSign(bigDecimal)) {
              return -0.0d;
          }
  
          return bigDecimal.doubleValue();
      }
docs: Converts this {@code Decimal128} to a {@code double}. This conversion is similar to the <i>narrowing primitive conversion</i> from
  {@code double} to {@code float} as defined in <cite>The Java&trade; Language Specification</cite>: if this {@code Decimal128} has
  too great a magnitude to represent as a {@code double}, it will be converted to {@link Double#NEGATIVE_INFINITY} or
  {@link Double#POSITIVE_INFINITY} as appropriate.  Note that even when the return value is finite, this conversion can lose
  information about the precision of the {@code Decimal128} value. Note that {@code #NEGATIVE_ZERO} is converted to {@code 0.0d}.
  
  @return this {@code Decimal128} converted to a {@code double}.
  @since 3.10