Another take on decimal data types

rumbu rumbu at rumbu.ro
Thu Jan 11 22:36:40 UTC 2018


On Thursday, 11 January 2018 at 21:24:30 UTC, kdevel wrote:
> On Thursday, 11 January 2018 at 20:44:13 UTC, kdevel wrote:
>> On Thursday, 11 January 2018 at 20:35:03 UTC, kdevel wrote:
>>>              <--- loop output missing
>
> loop.d
> ```
> import std.stdio;
> import decimal;
>
> void loopme(T) ()
> {
>    "---".writeln;
>    T e = T(1000);
>    while (e > T(1e-6)) {
>       e.writeln;
>       e /= 10;
>    }
> }
>
> void main ()
> {
>    loopme!float;
>    loopme!decimal32;
> }
> ```
>
> This prints
>
>    ---
>    1000
>    100
>    10
>    1
>    0.1
>    0.01
>    0.001
>    0.0001
>    1e-05
>    ---
>    1000
>    100
>    10
>    1
>    0.1
>    0.0100000    <--
>    0.00100000   <--
>    0.000100000  <--
>    1.00000e-05  <--
>
> Why are there trailing zeroes?


As I said, the %g specifier (used by default in writeln) makes me 
cry. Anyway, I made some modifications, now it prints correctly 
(in fact using floats just proves the need of decimals on my 
system):

--
1000
100
10
1
0.1
0.01
0.00099999
0.000099999
1e-05
---
1000
100
10
1
0.1
0.01
0.001
0.0001
1e-05

Regarding printf, I cannot help, this is a C function, has 
nothing to do with D formatting.



More information about the Digitalmars-d-announce mailing list