On Sat, Feb 09, 2019 at 03:52:38AM +0000, Murilo via Digitalmars-d-learn wrote: > On Saturday, 9 February 2019 at 03:28:24 UTC, Adam D. Ruppe wrote: [...] > > But you can change this with the format specifiers (use `writefln` > > instead of `writeln` and give a precision argument) or, of course, > > you can use the same C printf function from D. > > Thanks, but which precision specifier should I use? I already tried > "%.20f" but it still produces a result different from C? Is there a > way to make it identical to C?
I say again, you're asking for far more digits than are actually there. The extra digits are only an illusion of accuracy; they are essentially garbage values that have no real meaning. It really does not make any sense to print more digits than are actually there. On the other hand, if your purpose is to export the double in a textual representation that guarantees reproduction of exactly the same bits when imported later, you could use the %a format which writes out the mantissa in exact hexadecimal form. It can then be parsed again later to reproduce the same bits as was in the original double. Or if your goal is simply to replicate C behaviour, there's also the option of calling the C fprintf directly. Just import core.stdc.stdio or declare the prototype yourself in an extern(C) declaration. T -- If it breaks, you get to keep both pieces. -- Software disclaimer notice
