Convert '165.0' to int

Billy Mays noway at nohow.com
Fri Jul 22 00:45:42 EDT 2011


On 7/21/2011 10:40 PM, Thomas 'PointedEars' Lahn wrote:
> Billy Mays wrote:
>
>> On 07/21/2011 08:46 AM, Web Dreamer wrote:
>>> If you do not want to use 'float()' try:
>>>
>>> int(x.split('.')[0])
>>
>> This is right.
>
> Assuming that the value of `x' is in the proper format, of course.  Else you
> might easily cut to the first one to three digits of a string representation
> (if `.' is the thousands separator of the locale, e. g.)
>

The point (which was clear to me) was to convert a properly formatted 
string representation of a floating point number to an integer.  We 
might also assume the number could be a hex encoded float or be in 
scientific notation.  If the input is not properly formatted, it is 
unreasonable for us to return a correct value.


>>> But, the problem is the same as with int(float(x)), the integer number is
>>> still not as close as possible as the original float value.
>>>
>>> I would in fact consider doing this:
>>>
>>> int(round(float(x)))
>>
>> This is wrong, since there is a loss of information in the float cast:
>>
>>   >>>  float('9007199254740993.0')
>> 9007199254740992.0
>>
>> Notice the last digit switched from a 3 to a 2?  Floats in python don't
>> have arbitrary accuracy.  You would need to import decimal and use it
>> for rounding to work properly.
>
> It should be floor() though, for that is what int() does.
>
Um, what?

--
Bill



More information about the Python-list mailing list