Issue #9951 has been updated by Akira Tanaka. Status changed from Assigned to Rejected The problem of float is ruby can not know what user want to specify 5.678 or 5.67799999999999993605115378159098327159881591796875. DateTime's rounding to nanosecond means DateTime suppose users don't want to specify under-nanosecond time. I don't want to such assumption for Time. %L uses floor because 0.9999 should be shown as 999, not 1000. So, I don't have idea to solve this issue in Ruby side. Please use rational, such as 5.678r. ``` % ruby -e 'p Time.new(2014,1,2,3,4,5.678r).strftime("%L")' "678" ``` ---------------------------------------- Bug #9951: DateTime.strftime and Time.strftime differ in how they treat "%L" https://bugs.ruby-lang.org/issues/9951#change-47262 * Author: David Chelimsky * Status: Rejected * Priority: Normal * Assignee: Akira Tanaka * Category: core * Target version: * ruby -v: 1.9.3 - 2.1.1 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- ~~~ruby DateTime.new(2014,1,2,3,4,5.678).strftime("%L") # => "678" Time.new(2014,1,2,3,4,5.678).strftime("%L") # => "677" ~~~ I think these should both produce "678", but at the very least they should produce the same number so users don't have to special case one or the other. I realize there is floating point math under the hood here, but that's an implementation detail I don't think users should care about in this case. -- https://bugs.ruby-lang.org/