将小数点后一位数字四舍五入

时间:2020-08-28 02:02:32

标签: python

我想将下面的数字四舍五入到小数点后两位。结果必须为33.39,但Python给出的结果为33.38,因为5舍入为偶数,因此为8。

round(33.385, 2)

4 个答案:

答案 0 :(得分:2)

这实际上与舍入至最近/偶数无关。 33.385是十进制数字,但在您的硬件中以二进制浮点形式表示为 approximation decimal模块可以为您显示该二进制近似值的确切十进制值:

>>> import decimal
>>> decimal.Decimal(33.385)
Decimal('33.38499999999999801048033987171947956085205078125')

这就是为何将其四舍五入为33.38的原因:存储的确切值比33.39略微接近33.38。

如果需要精确的十进制结果,请不要使用硬件的二进制浮点数。例如,您可以在decimal舍入模式下使用ROUND_HALF_UP模块。

例如,

>>> from decimal import Decimal as D
>>> x = D("33.385")
>>> x
Decimal('33.385')
>>> twodigits = D("0.01")
>>> x.quantize(twodigits) # nearest/even is the default
Decimal('33.38')
>>> x.quantize(twodigits, rounding=decimal.ROUND_HALF_EVEN) # same thing
Decimal('33.38')
>>> x.quantize(twodigits, rounding=decimal.ROUND_HALF_UP) # what you want
Decimal('33.39')
>>> float(_) # back to binary float
33.39
>>> D(_)  # but what the binary 33.39 _really_ is
Decimal('33.3900000000000005684341886080801486968994140625')

答案 1 :(得分:0)

您可以执行以下操作:

import math

math.ceil(33.385 * 100.0) / 100.0

参考:Round up to Second Decimal Place in Python

答案 2 :(得分:0)

实际上round()舍入到您指定的最接近的小数点。编程语言中的浮点数会带来一些麻烦,因为计算机无法使用给定的位来创建足够具体的小数,因此编程语言已经显示了您需要查看的内容,但没有显示实际数字。您可以使用decimal库查看实数。这样一来,您可以了解为什么有时数字以5结尾或向上或向下舍入。

如果要舍入,则可以使用math模块轻松完成。

import math

math.floor(33.385 * 100) / 100 

如果您想四舍五入,可以使用math.ceil

import math

math.ceil(33.385 * 100) / 100

或者,如果您愿意,仍可以使用round()函数,但要对其进行一些更改

向上滚动

decimal_point = 2
change = 0.3 / 10**decimal_point
round(33.385 + change, decimal_point)

向下舍入:

decimal_point = 2
change = 0.3 / 10**decimal_point
round(33.385 - change, decimal_point)

答案 3 :(得分:0)

只是计算机浮点近似的结果。 计算机了解二进制,并且并非所有浮点值都具有准确的二进制表示。 一个著名的例子:

print(0.1 + 0.2 == 0.3)
False

想知道为什么吗? 结果为0.30000000000000004,这是因为二进制文件中的0.2与0.00110011001100...

使用@ Rfroes87的建议将数字转换为整数精度的标度,然后四舍五入为最接近的整数)