On 2:59 PM, Steven D'Aprano wrote:
I want the mantissa and decimal exponent of a float, in base 10:

mantissa and exponent of 1.2345e7
=>  (1.2345, 7)

(0.12345, 8) would also be acceptable.


The math module has a frexp() function, but it produces a base-2 exponent:

math.frexp(1.2345e7)
(0.73581933975219727, 24)

Have I missed a built-in or math function somewhere?


First point is that this is a conversion, since the float is stored internally using a binary exponent. So anything you do with logs might just give roundoff errors, one way or another. I'd therefore suggest converting the number explicitly, using whatever approach is appropriate to the further processing of the number.

If you want the version that will display, then convert it to a string, and parse that.

If you want to do further processing, use the decimal module to convert it. Once it's converted, there's an as_tuple() method that will give you an exact representation of the original value. That may not be the same mantissa as you'd get with the original, and for numbers like 9.99999999 or whatever, this could be significant.

DaveA
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to