Python Decimal 模块中的 ROUND_HALF_EVEN 和 ROUND_HALF_DOWN 在Python 中,Decimal 模块提供了高精度的十进制浮点数运算,可以避免浮点数计算时出现的精度丢失问题。Decimal 模块中有两种常用的舍入模式:ROUND_HALF_EVEN 和 ROUND_HALF_DOWN。这两种舍入模式对于处理浮点数的舍入操作非常有用。 Decimal 模块 Decimal...
importrandomfromdecimalimportDecimal, ROUND_HALF_UP, ROUND_HALF_EVEN#使用 decimal 模块进行 四舍五入法defsi_wu_decimal(de, n, up=True):#制作formatformat_str ='{:.nf}'.replace('n', str(n))#制作保留小数位的目标格式 比如 0.00decimal_format_str =format_str.format(0)#将小数点转换成字符串...
ROUND_HALF_EVEN)printx.quantize(Decimal('1.00000'), ROUND_HALF_DOWN)printx.quantize(Decimal('1.00000'), ROUND_CEILING)printx.quantize(Decimal('1.00000'), ROUND_FLOOR)printx.quantize(Decimal('1.00000'), ROUND_UP)printx.quantize(Decimal('1.00000'), ROUND_DOWN) ...
>>> from decimal import getcontext >>> getcontext().rounding 'ROUND_HALF_EVEN' 1. 2. 3. ROUND_HALF_EVEN实际上就是奇进偶舍, 如果要指定真正的四舍五入,那么我们需要在 quantize 中指定进位方式为ROUND_HALF_UP: >>> from decimal import Decimal, ROUND_HALF_UP >>> Decimal('0.125').quantize...
ROUND_HALF_DOWN:五舍六入(5 向下)` ROUND_HALF_EVEN:银行家舍入 ROUND_UP:无条件进位 ROUND_DOWN:无条件舍去 如果不传默认为ROUND_HALF_EVEN,跟round效果一致 四舍五入取整时将以上的0.001改为1:b = a.quantize(Decimal('1'), rounding=ROUND_HALF_UP)...
在Python 2里面,直接使用round,1.125精确到两位小数后为1.13,而1.115精确到两位小数后是1.11。 再来看看Python 3下面的效果: 在Python 3下面,1.125在精确到两位小数以后是1.12。 他举的例子,在Python 3中先放大再缩小,也并不总是正确。 装逼货 还有一种装逼货,文章和先放大再缩小差不多,但是他还知道decimal这个...
(Decimal('1.0000'),ROUND_DOWN))#-3.1234,始终不进位(不管负数还是正数)x3=Decimal('3.1234567')#正数第五位小数位超过5print(x3)#3.1234567print(x3.quantize(Decimal('1.0000'),ROUND_HALF_EVEN))#3.1235,默认值,四舍五入进位print(x3.quantize(Decimal('1.0000'),ROUND_HALF_DOWN))#3.1235,为接近最近的...
(Decimal('1.0000'),ROUND_UP))#-3.1235,始终进位(不管负数还是正数)print(x.quantize(Decimal('1.0000'),ROUND_DOWN))#-3.1234,始终不进位(不管负数还是正数)x2=Decimal('-3.1234321')#负数第五位小数位不超过5print(x2)#--3.1234321print(x2.quantize(Decimal('1.0000'),ROUND_HALF_EVEN))#-3.1234,默认...
Decimal('3.16') 上述示例演示了如何使用默认的ROUND_HALF_EVEN 舍入规则。 舍入规则有很多种,Decimal 模块提供了所有舍入规则。例如: >>> import decimal >>> total_amount.quantize(penny, decimal.ROUND_UP) Decimal('3.17') 本示例显示了使用另一种不同的舍入规则的结果。
另一种写法是通过 Decimal 的 quantize 方法,指定保留位数和舍入规则,效果是一样的。 fromdecimalimportDecimalx =1.045print(Decimal(str(x)).quantize(Decimal('0.01'), rounding='ROUND_HALF_UP')) 这样,就能完美地按四舍五入保留小数了。 不过这里还有一个小小的坑,就是一定要通过字符串去创建 Decimal 对象...