floating point value rounded to 6digits

Steven Schveighoffer schveiguy at yahoo.com
Tue Sep 19 23:35:15 UTC 2017


On 9/19/17 7:28 PM, Ivan Kazmenko wrote:
> 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.

What he's looking for is a way to globally set "I want all floating 
point values to print this way, unless a more specific specifier is given."

It's not a terrible idea, as any code that's using %s most of the time 
doesn't really care what the result looks like.

I imagine an API like this:

import std.format: setDefaultFormat;
setDefaultFormat!float("%.10f");

-Steve


More information about the Digitalmars-d-learn mailing list