On Monday, July 14, 2014 10:47:21 AM UTC-7, Petr Kaleta wrote: > > Hey Jeremy, > I am running on jRuby 1.7.13. But still, this doesn't make any sense, why > ruby is doing this :/ > > I don't understand your point with rounding already rounded time. > Basically I don't understand why ruby is converting 918000 to 917999. >
It's not really converting 918000 to 917999. It stores 1405341161.918000 in a binary floating point format, which doesn't exactly match the decimal format you provided. Example: '%0.15f' % 1405341161.918000 => "1405341161.917999982833862" So that is the input you are giving to the Time.at method. Internally, ruby 1.9+ stores Time objects with nanosecond precision, so this gets converted to 1405341161 seconds, 917999982 nanoseconds: Time.at(1405341161.918000).nsec => 917999982 If you want to give an exact fractional value, use a rational: Time.at(1405341161 + Rational(918000, 1000000)).nsec => 918000000 Do not work in a floating point form at any point in your computation if you want exact results. Thanks, Jeremy -- You received this message because you are subscribed to the Google Groups "sequel-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sequel-talk. For more options, visit https://groups.google.com/d/optout.
