Odd math related issue.

Alexandru Palade alexandru.palade at sellerengine.com
Mon Jul 21 14:21:49 CEST 2008


However, you should be carefully because using an %i modifier for a
what-should-be a float value truncates the value in a way you may not
expect.

What I mean is that if you have sent 2 out of 3 bytes, the math will be
200/3 which with the %i modifier will print 66, rather than 66.6 (or at
least 67 which is closer - have a look at the round() function).

Another thing, you could have just added a dot after the constant in
order to promote the expression to be evaluated as float. As in
    percentage = bytes_transferred / /self/.__sessions[path].total_bytes
* 100.
(notice the last dot)

Fredrik Lundh wrote:
> Robert Rawlins wrote:
>
>> I’ve got what seems to me to be a totally illogical math issue here 
>> which I can’t figure out. Take a look at the following code:
>>
>>         /self/.__logger.info(/"%i / %i"/ % (bytes_transferred, 
>> /self/.__sessions[path].total_bytes))
>>
>>         percentage = bytes_transferred / 
>> /self/.__sessions[path].total_bytes * 100
>>
>>         /self/.__logger.info(/"%i"/ % percentage)
>>
>> Seems fairly straight forward, you would think. It takes two values 
>> and calculates the percentage of one from the other, however, 
>> percentage always comes back as ‘0’ for some reason, look at this log 
>> output.
>
> if you divide two integers, you'll get an integer back (in Python 2.X, 
> at least).  quick fix:
>
>      percentage = bytes_transferred * 100 / total_bytes
>
> </F>
>
> -- 
> http://mail.python.org/mailman/listinfo/python-list
>




More information about the Python-list mailing list