[Numpy-discussion] Number of digits

Robert Kern robert.kern at gmail.com
Mon Jul 10 09:15:38 CDT 2006

```David Douard wrote:
> On Mon, Jul 10, 2006 at 08:46:33AM -0500, Robert Kern wrote:
>> Tim Hochberg wrote:
>>> Nils Wagner wrote:
>>>> Hi all,
>>>>
>>>> how can I increase the number of digits in the output of str(.) ?
>>>>
>>> You can't as far as I know. For floats, you can use "%.nf". For example:
>>>
>>> "%.13f" % 493.4802200544680
>> The problem is is that he doesn't have a float. He has one of our float64scalar
>> objects. The str() of a real Python float will give as many digits as are
>> necessary to recreate number and no more (or maybe one or two more). A str() of
>> a float64scalar will round according to some rule that I haven't figured out,
>> yet. It doesn't seem to be configurable with numpy.set_printoptions().
>
> This is a different ptoblem from the one exposed by Nils. I mean, tha
> fact that str() on numpy.float64 objects is somewhat obscure is a
> problem that should obviously be addressed some day. However, as far as
> I understand Nils' message, the "%.13f" trick is enough for what he
> need. But I may be wrong... He just want to "increase the number of
> digits", not have the "optimal" number of digits (as long as this is
> meaningfull).
>
> But I may have missed something.

No, you didn't miss anything. I just haven't gotten enough sleep.

I thought that Python floats had a __str__ that computed just as many places as
necessary, but it looks like it just rounds at 12 places. This is not an
adjustable parameter (barring modifying the C code of the interpreter). I also
thought that the float scalars were being printed differently. However, the code
for the float64scalar __str__ just gets the double value, creates a Python float
object from it, and returns the __str__ result from that object.

Everything works as intended. Nothing to see here. Move along.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma