Significant digits in a float?

Ned Batchelder ned at nedbatchelder.com
Mon Apr 28 15:00:38 EDT 2014


On 4/28/14 2:39 PM, Roy Smith wrote:
> On Monday, April 28, 2014 12:07:14 PM UTC-4, Ned Batchelder wrote:
>
>> On 4/28/14 12:00 PM, Roy Smith wrote:
>>> 38.0  ==> 0
>>> [...]
>>> Is there any clean way to do that?  The best I've come up with so far is to str() them and parse the
>>> remaining string to see how many digits it put after the decimal point.
>>
>> That sounds like a pretty clean way:  len(str(num).partition(".")[2]),
>> though it also sounds like you understand all of the inaccuracies in
>
> Well, it's actually, a little uglier, because I want to map 38.0 ==>0, so I need to special case that.

Ah, right.

>
> The other annoying thing about using str() is its behavior isn't well defined.  It looks like it does the right thing, but I imagine the details could change in a different implementation.
>

I don't have a reference, but in recent Pythons, str() was specifically 
changed to guarantee that it produces the shortest string that when 
re-interpreted as a float, produces the same float.

-- 
Ned Batchelder, http://nedbatchelder.com




More information about the Python-list mailing list