/** flo_denominator * */ @JRubyMethod(name = "denominator", compat = CompatVersion.RUBY1_9) @Override public IRubyObject denominator(ThreadContext context) { if (Double.isInfinite(value) || Double.isNaN(value)) { return RubyFixnum.one(context.runtime); } return super.denominator(context); }
/** flo_denominator * */ @JRubyMethod(name = "denominator") @Override public IRubyObject denominator(ThreadContext context) { if (Double.isInfinite(value) || Double.isNaN(value)) { return RubyFixnum.one(context.runtime); } return super.denominator(context); }
/** flo_denominator * */ @JRubyMethod(name = "denominator") @Override public IRubyObject denominator(ThreadContext context) { if (Double.isInfinite(value) || Double.isNaN(value)) { return RubyFixnum.one(context.runtime); } return super.denominator(context); }
/** flo_denominator * */ @JRubyMethod(name = "denominator", compat = CompatVersion.RUBY1_9) @Override public IRubyObject denominator(ThreadContext context) { if (Double.isInfinite(value) || Double.isNaN(value)) { return RubyFixnum.one(context.runtime); } return super.denominator(context); }
public RubyRational convertToRational() { final ThreadContext context = getRuntime().getCurrentContext(); return RubyRational.newRationalRaw(context.runtime, numerator(context), denominator(context)); }
public RubyRational convertToRational() { final ThreadContext context = getRuntime().getCurrentContext(); return RubyRational.newRationalRaw(context.runtime, numerator(context), denominator(context)); }
private static void formatSubMillisGt3(final Ruby runtime, final StringBuilder buff, final int width, RubyNumeric sub_millis) { final int prec = width - 3; final ThreadContext context = runtime.getCurrentContext(); RubyNumeric power = (RubyNumeric) runtime.newFixnum(10).op_pow(context, prec); RubyNumeric truncated = (RubyNumeric) sub_millis.numerator(context). convertToInteger().op_mul(context, power); truncated = (RubyNumeric) truncated.idiv(context, sub_millis.denominator(context)); long decimals = truncated.convertToInteger().getLongValue(); buff.append(RubyTimeOutputFormatter.formatNumber(decimals, prec, '0')); }
private static void formatSubMillisGt3(final Ruby runtime, final StringBuilder buff, final int width, RubyNumeric sub_millis) { final int prec = width - 3; final ThreadContext context = runtime.getCurrentContext(); RubyNumeric power = (RubyNumeric) runtime.newFixnum(10).op_pow(context, prec); RubyNumeric truncated = (RubyNumeric) sub_millis.numerator(context). convertToInteger().op_mul(context, power); truncated = (RubyNumeric) truncated.idiv(context, sub_millis.denominator(context)); long decimals = truncated.convertToInteger().getLongValue(); buff.append(RubyTimeOutputFormatter.formatNumber(decimals, prec, '0')); }
private long initMillis(final ThreadContext context, IRubyObject ajd) { final Ruby runtime = context.runtime; // cannot use DateTimeUtils.fromJulianDay since we need to keep ajd as a Rational for precision // millis, @sub_millis = ((ajd - UNIX_EPOCH_IN_AJD) * 86400000).divmod(1) IRubyObject val; if (ajd instanceof RubyFixnum) { val = ((RubyFixnum) ajd).op_minus(context, 4881175 / 2); val = ((RubyFixnum) val).op_mul(context, DAY_MS); val = ((RubyInteger) val).op_plus(context, RubyFixnum.newFixnum(runtime, DAY_MS / 2)); // missing 1/2 } else { RubyRational _UNIX_EPOCH_IN_AJD = RubyRational.newRational(runtime, -4881175, 2); // -(1970-01-01) val = _UNIX_EPOCH_IN_AJD.op_plus(context, ajd); val = DAY_MS(context).op_mul(context, val); } if (val instanceof RubyFixnum) { return ((RubyFixnum) val).getLongValue(); } // fallback val = ((RubyNumeric) val).divmod(context, RubyFixnum.one(context.runtime)); IRubyObject millis = ((RubyArray) val).eltInternal(0); if (!(millis instanceof RubyFixnum)) { // > java.lang.Long::MAX_VALUE throw runtime.newArgumentError("Date out of range: millis=" + millis + " (" + millis.getMetaClass() + ")"); } IRubyObject subMillis = ((RubyArray) val).eltInternal(1); this.subMillisNum = ((RubyNumeric) subMillis).numerator(context).convertToInteger().getLongValue(); this.subMillisDen = ((RubyNumeric) subMillis).denominator(context).convertToInteger().getLongValue(); return ((RubyFixnum) millis).getLongValue(); }
private long initMillis(final ThreadContext context, IRubyObject ajd) { final Ruby runtime = context.runtime; // cannot use DateTimeUtils.fromJulianDay since we need to keep ajd as a Rational for precision // millis, @sub_millis = ((ajd - UNIX_EPOCH_IN_AJD) * 86400000).divmod(1) IRubyObject val; if (ajd instanceof RubyFixnum) { val = ((RubyFixnum) ajd).op_minus(context, 4881175 / 2); val = ((RubyFixnum) val).op_mul(context, DAY_MS); val = ((RubyInteger) val).op_plus(context, RubyFixnum.newFixnum(runtime, DAY_MS / 2)); // missing 1/2 } else { RubyRational _UNIX_EPOCH_IN_AJD = RubyRational.newRational(runtime, -4881175, 2); // -(1970-01-01) val = _UNIX_EPOCH_IN_AJD.op_plus(context, ajd); val = DAY_MS(context).op_mul(context, val); } if (val instanceof RubyFixnum) { return ((RubyFixnum) val).getLongValue(); } // fallback val = ((RubyNumeric) val).divmod(context, RubyFixnum.one(context.runtime)); IRubyObject millis = ((RubyArray) val).eltInternal(0); if (!(millis instanceof RubyFixnum)) { // > java.lang.Long::MAX_VALUE throw runtime.newArgumentError("Date out of range: millis=" + millis + " (" + millis.getMetaClass() + ")"); } IRubyObject subMillis = ((RubyArray) val).eltInternal(1); this.subMillisNum = ((RubyNumeric) subMillis).numerator(context).convertToInteger().getLongValue(); this.subMillisDen = ((RubyNumeric) subMillis).denominator(context).convertToInteger().getLongValue(); return ((RubyFixnum) millis).getLongValue(); }