Python has default round() function, but I was programming with cython and want to replace pythonic code with numpy function. However, I got the following results when experimen
The problem is that the binary representation of floating point numbers can't exactly represent most decimal numbers. For example, the two closest values to 1.235 are:
Since the first one is closer to the desired value, it's the one you get.
When you let the Python environment display a floating-point number, it uses the __repr__
conversion function which shows enough digits to unambiguously identify the number. If you use the __str__
conversion instead, it should round the number to a reasonable number of digits. At least that's what the built-in float
type does, I assume numpy works the same way. The print
function calls __str__
by default, so try this:
print np.around(1.23456789, decimals=3)
For applications where you absolutely need decimal accuracy there is the decimal module. It can do rounding as well.