On Wednesday, 3 July 2013 at 05:10:03 UTC, Jonathan M Davis wrote:
On Wednesday, July 03, 2013 07:04:47 cal wrote:
On Wednesday, 3 July 2013 at 04:32:15 UTC, Jonathan M Davis wrote:
> On Wednesday, July 03, 2013 06:23:12 Josh wrote:
>> writeln(to!double("151.42499"));    //prints 151.425
>> >> Is there any way to stop this rounding? > > No. double can't hold the value 151.42499. There are _tons_ > of
> values that it
> can't hold exactly. The same goes for float and real. > Floating
> point values are
> rounded all the time. Note that
> > double d = 151.42499;
>     writeln(d);
> > prints exactly the same thing as your example. > > - Jonathan M Davis

void main()
{
    double d = 151.42499;
    assert(d == 151.42499);
}

The rounding occurs in writeln surely.

That's true because _both_ of the floating point values there get rounded to 151.425, and 151.425 is equal to 151.425. writeln is not doing anything wrong.
I highly suggest that you read this:

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

- Jonathan M Davis

import std.stdio;
void main()
{
        double d = 151.42499;
        writefln("%.10f", d);
}

Reply via email to