On Wednesday, 3 July 2013 at 04:51:06 UTC, Jonathan M Davis wrote:
On Wednesday, July 03, 2013 06:44:33 Josh 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
Is there any way I would be able to hold that number then?
Without rounding? You'd need fixed point math rather than
floating point math.
There is nothing built into the language to support that (or
into any C-based
language of which I'm aware). I believe that C libraries exist
which provide
it though.
http://en.wikipedia.org/wiki/Fixed-point_arithmetic
Most people just use floating point though, since in most
cases, you really
don't need fixed point.
- Jonathan M Davis
Jonathan, do you know of any fixed point D library? If not, would
it be worth me making one for phobos?
Thanks,
Josh