python Decimal().quantize() ——十进制定点和浮点运算

https://blog.csdn.net/weixin_45912307/article/details/120641461

Decimal().quantize() ——十进制定点和浮点运算_decimal.quantize_JSon liu的博客-CSDN博客

1. decimal.Decimal(value=‘0’, context=None)

  • value 可以是整数,字符串,元组,float ,或另一个 Decimal 对象。 如果没有给出 value,则返回 Decimal('0')
    • 如果 value 是一个字符串,它应该在前导和尾随空格字符以及下划线被删除之后符合十进制
    • 如果 value 是一个 tuple ,它应该有三个组件,一个符号( 0 表示正数或 1 表示负数),一个数字的 tuple 和整数指数。 例如, Decimal((0, (1, 4, 1, 4), -3))返回 Decimal('1.414')
    • 如果 value 是 float ,则二进制浮点值无损地转换为其精确的十进制等效值。 此转换通常需要53位或更多位数的精度
  • context 参数的目的是确定 value 是格式错误的字符串时该怎么做。 如果上下文陷阱InvalidOperation,则引发异常;否则,构造函数返回一个新的 Decimal,其值为 NaN

2. quantize(exp, rounding=None, context=None)

  • 返回的值等于舍入后的第一个运算数并且具有第二个操作数的指数
  • 如果第二个运算数的指数大于第一个运算数的指数那或许需要舍入。在这种情况下,舍入模式由给定 rounding 参数决定,其余的由给定 context参数决定;如果参数都未给定,使用当前线程上下文的舍入模式。
  • 每当结果的指数大于 Emax 或小于 Etiny 就会返回错误。
  • 参数解读:
    • exp:指定第一个运算数输出的指数格式
    • rounding:舍入模式
    • context:上下文

舍入模式:

decimal.ROUND_CEILING							| 					舍入方向为 Infinity。
decimal.ROUND_DOWN								| 					舍入方向为零。
decimal.ROUND_FLOOR								| 					舍入方向为 -Infinity。
decimal.ROUND_HALF_DOWN							| 					舍入到最接近的数,同样接近则舍入方向为零。
decimal.ROUND_HALF_EVEN							| 					舍入到最接近的数,同样接近则舍入到最接近的偶数。
decimal.ROUND_HALF_UP							| 					舍入到最接近的数,同样接近则舍入到零的反方向。
decimal.ROUND_UP								| 					舍入到零的反方向。
decimal.ROUND_05UP								| 					如果最后一位朝零的方向舍入后为 0 或 5 则舍入到零的反方向;否则舍入方向为零。

3. decimal.Decimal(value=‘0’, context=None).quantize(exp, rounding=None, context=None)

作用:

  • 如果数据库查询到的结果为Decimal类型,转化为string
from decimal import Decimal
data = Decimal('100.07159')
new_data = str(Decimal(data).quantize(Decimal('0.0')))
print(type(new_data))
  • 如果数据库查询到的结果为Decimal类型,转化为float
from decimal import Decimal
data = Decimal('100.07159')
new_data = float(Decimal(data).quantize(Decimal('0.0')))
print(type(new_data))
  • 固定控制小数点后面的位数,不能超过getcontext().prec的位数
'''
# Rounding
ROUND_DOWN = 'ROUND_DOWN'
ROUND_HALF_UP = 'ROUND_HALF_UP'
ROUND_HALF_EVEN = 'ROUND_HALF_EVEN'
ROUND_CEILING = 'ROUND_CEILING'
ROUND_FLOOR = 'ROUND_FLOOR'
ROUND_UP = 'ROUND_UP'
ROUND_HALF_DOWN = 'ROUND_HALF_DOWN'
ROUND_05UP = 'ROUND_05UP'
'''
from decimal import Decimal
data = Decimal('100.07159')
res = float(Decimal(data).quantize(Decimal('0.001'),rounding='ROUND_HALF_UP'))
print(res)

官网链接:decimal --- 十进制定点和浮点运算 — Python 3.11.2 文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值