Converting 5.223701009526849e-05 to 5e-05

Cecil Westerhof Cecil at decebal.nl
Sun May 3 05:22:18 EDT 2015


Op Sunday 3 May 2015 10:40 CEST schreef Ben Finney:

> Cecil Westerhof <Cecil at decebal.nl> writes:
>
>> When I have a value like 5.223701009526849e-05 in most cases I am
>> not interested in all the digest after the dot.
>
> What type of value is it?

If the absolute value is bigger as 0 and smaller as 1, it should be a
float. ;-)


> A ‘float’ value has many different textual representations, most of
> them inaccurate. So talking about the digits of a ‘float’ value is
> only partly meaningful; digits are a property of some chosen
> representation, not intrinsic to the number.
>
> A ‘str’ value can be converted in various ways, but is useless as a
> number until you create a new number from the result.
>
> Choosing a solution will rely on understanding that the textual
> representation of a number is not itself a number; and vice versa, a
> number value does not have a canonical text representation.

It is because I display things like:
    02:47:18: Increase memoize -> iterative 19
              (0.0004942629893776029 / 2.475001383572817e-05)

And that is way to specific.


>> Is there a simple way to convert it to a string like '5e-05'?
>
> Assuming we're talking about a ‘float’ value::
>
>>>> foo = 5.223701009526849e-05
>>>> "{foo:5.1}".format(foo=foo)
> '5e-05'
>
> See the ‘str.format’ documentation, especially the detailed
> documentation for the “format specification mini-language”
> <URL:https://docs.python.org/3/library/string.html#format-specification-mini-language>
> for how to specify exactly how you want values to be formatted as
> text.

Very interesting documentation. I go for:
    '{foo:.3E}'.format(foo=foo)

Then it simplifies also big numbers and it works for int's also. (Not
needed now, but it never hurts to be prepared for the future.)

-- 
Cecil Westerhof
Senior Software Engineer
LinkedIn: http://www.linkedin.com/in/cecilwesterhof



More information about the Python-list mailing list