# Getting fractional part from a float without using string operations

Chris Rebert clp at rebertia.com
Thu Nov 20 07:24:03 CET 2008

```On Wed, Nov 19, 2008 at 10:01 PM, srinivasan srinivas
<sri_annauni at yahoo.co.in> wrote:
> Yes it works for most of the cases.  But it doesn't for the following case:
>
>>>> str(abs(int(1234567.89)-1234567.89))
> '0.889999999898'

Since you really care about significant figures here, have you
considered using decimal rather than float as, IIRC, it handles this
correctly?

Cheers,
Chris
--
Follow the path of the Iguana...
http://rebertia.com

>
> Thanks,
> Srini
>
>
> ----- Original Message ----
> From: Tino Wildenhain <tino at wildenhain.de>
> To: srinivasan srinivas <sri_annauni at yahoo.co.in>
> Cc: Jeremiah Dodds <jeremiah.dodds at gmail.com>; python-list at python.org
> Sent: Wednesday, 19 November, 2008 7:33:46 PM
> Subject: Re: Getting fractional part from a float without using string operations
>
> srinivasan srinivas wrote:
>> Yes. But it didn't give only the expected decimals.
>> For ex:
>>  >>> a = 1.23
>>  >>> abs(int(a) -a)
>> 0.22999999999999998
>>  I would like to get the result '0.23' only.
>
> well, thats what get stored internally - there
> is no way around it if you are using floating
> point numbers:
>
>>>> 0.23
> 0.23000000000000001
>
> but str() handles the rounding correctly:
>
>>>> print 0.23
> 0.23
>
>>>> print abs(int(a) -a)
> 0.23
>
> for the problems with FP figures.
>
> Regards
> Tino
>
>
>