From: Kirk Haines Date: 2010-08-31T04:13:48+09:00 Subject: Re: Time#round in 1.9 On Mon, Aug 30, 2010 at 12:42 PM, Intransition wrote: > Anyone know about Time#round in 1.9. Apparently it exists but it seems > to do nothing but eat up cpu cycles. > >  ruby-1.9.2-p0 > t = Time.new >   => 2010-08-30 14:34:03 -0400 >  ruby-1.9.2-p0 > t.round(100000) >   => 2010-08-30 14:34:03 -0400 >  ruby-1.9.2-p0 > t.round(1000000) >   => 2010-08-30 14:34:03 -0400 A voice was heard to utter: "Use the source, Luke! Errr, uh, Trans. Oh, and the docs!" /* * call-seq: * time.round([ndigits]) -> new_time * * Rounds sub seconds to a given precision in decimal digits (0 digits by default). * It returns a new time object. * _ndigits_ should be zero or positive integer. * * require 'time' * * t = Time.utc(2010,3,30, 5,43,"25.123456789".to_r) * p t.iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z" * p t.round.iso8601(10) #=> "2010-03-30T05:43:25.0000000000Z" * p t.round(0).iso8601(10) #=> "2010-03-30T05:43:25.0000000000Z" * p t.round(1).iso8601(10) #=> "2010-03-30T05:43:25.1000000000Z" * p t.round(2).iso8601(10) #=> "2010-03-30T05:43:25.1200000000Z" * p t.round(3).iso8601(10) #=> "2010-03-30T05:43:25.1230000000Z" * p t.round(4).iso8601(10) #=> "2010-03-30T05:43:25.1235000000Z" * p t.round(5).iso8601(10) #=> "2010-03-30T05:43:25.1234600000Z" * p t.round(6).iso8601(10) #=> "2010-03-30T05:43:25.1234570000Z" * p t.round(7).iso8601(10) #=> "2010-03-30T05:43:25.1234568000Z" * p t.round(8).iso8601(10) #=> "2010-03-30T05:43:25.1234567900Z" * p t.round(9).iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z" * p t.round(10).iso8601(10) #=> "2010-03-30T05:43:25.1234567890Z" * * t = Time.utc(1999,12,31, 23,59,59) * p((t + 0.4).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z" * p((t + 0.49).round.iso8601(3)) #=> "1999-12-31T23:59:59.000Z" * p((t + 0.5).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" * p((t + 1.4).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" * p((t + 1.49).round.iso8601(3)) #=> "2000-01-01T00:00:00.000Z" * p((t + 1.5).round.iso8601(3)) #=> "2000-01-01T00:00:01.000Z" * * t = Time.utc(1999,12,31, 23,59,59) * p (t + 0.123456789).round(4).iso8601(6) #=> "1999-12-31T23:59:59.123500Z" */ Below that is a short, simple to follow implementation. You are telling it to round to 100000 or 1000000 digits. That's probably not what you mean? Kirk Haines