floating point value rounded to 6digits
Ivan Kazmenko
gassa at mail.ru
Tue Sep 19 23:28:25 UTC 2017
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.
More information about the Digitalmars-d-learn
mailing list