On Tuesday, 19 September 2017 at 22:44:06 UTC, greatsam4sure wrote:
On Tuesday, 19 September 2017 at 21:52:57 UTC, Ivan Kazmenko wrote:
On Tuesday, 19 September 2017 at 20:47:02 UTC, greatsam4sure wrote:
double  value = 20.89766554373733;
writeln(value);
//Output =20.8977

How do I output the whole value without using writfln,write or format. How do I change this default

The default when printing floating-point numbers is to show six most significant digits. You can specify the formatting manually with writefln, for example,

    writefln ("%.10f", value);

will print the value with 10 digits after the decimal point.
The writef/writefln function behaves much like printf in C.

See here for a reference on format strings:
https://dlang.org/library/std/format/formatted_write.html#format-string

Ivan Kazmenko.

I don't want to use write,writefln or format. I just want to change the default

Unlikely to be possible. The built-in data types, such as float or double, by definition should not be customizable to such degree.

Anyway, under the hood, write uses format with the default format specifier "%s" for the values it takes. So perhaps I'm not quite getting what exactly are you seeking to avoid.

For example, consider a helper function to convert the values, like the following:

import std.format, std.stdio;
string fmt (double v) {return v.format !("%.10f");}
void main () {
        double x = 1.01;
        writeln (x.fmt); // 1.0100000000
}

Alternatively, you can wrap your floating-point numbers in a thin struct with a custom toString():

import std.format, std.stdio;
struct myDouble {
        double v;
        alias v this;
        this (double v_) {v = v_;}
        string toString () {return v.format !("%.10f");}
}
void main () {
        myDouble x = 1.01, y = 2.02, z = x + y;
        writeln (z); // 3.0300000000
}

Ivan Kazmenko.

Reply via email to