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