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.