On Fri, 14 Feb 2014 17:14:03 -0500, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Thursday, February 13, 2014 23:37:13 Timothee Cour wrote:
Is there a function to do this?
If not and I/someone writes it, is there interest to add it to std.datetime?

Duration t = ...;
t.to!string => 5 secs, 889 ms, and 811 μs
t.round.to!string    => 5 secs

t=...;
t.to!string => 889 ms, and 811 μs
t.round.to!string    => 889 secs

Use case: shorter logs.

There is no function for that, and no one's ever asked for anything like it,
so I don't know how worthwhile it is to add. However, one possible
implementation would be

auto roundToLargest(Duration d)
{
    foreach(units; TypeTuple!("weeks", "days", "hours", "minutes",
                              "seconds", "msecs", "usecs"))
    {
        immutable value = d.total!units();
        if(value != 0)
            return dur!units(value);
    }

    return d;
}

You are doing the calculation for every test.

Better:
if(d >= dur!units(1))
   ...

Now, I think that the dur!units(1) should be statically determined, but if not, I think you could make it statically determined via enum.

-Steve

Reply via email to