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