floating point value rounded to 6digits

Steven Schveighoffer schveiguy at yahoo.com
Wed Sep 20 00:20:31 UTC 2017


On 9/19/17 8:04 PM, Jonathan M Davis wrote:
> On Tuesday, September 19, 2017 19:35:15 Steven Schveighoffer via
> Digitalmars-d-learn wrote:
>> 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-strin
>>>>> g
>>>>>
>>>>> 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");
> 
> The big problem with that is that it does not play nicely at all with pure.
> For writeln, that doesn't matter much, since it can't be pure anyway,
> because it's doing I/O, but it would matter for stuff like format or
> formattedWrite, which IIRC, writeln uses internally.

That's a perfectly acceptable tradeoff. So:

stdout.setDefaultFormat!float("%.10f");

-Steve


More information about the Digitalmars-d-learn mailing list