货币工具 - MoneyUtil

由来

货币计算中浮点精度问题会导致金额错误(如 0.1 + 0.2 != 0.3)。MoneyUtil 使用 Decimal 精确运算,提供元/分转换和含税/不含税价格计算。

方法

元/分转换

from hutool import MoneyUtil

MoneyUtil.fen_to_yuan(100)      # Decimal('1.00')
MoneyUtil.fen_to_yuan(1)        # Decimal('0.01')
MoneyUtil.fen_to_yuan('50')     # Decimal('0.50')

MoneyUtil.yuan_to_fen(1)        # 100
MoneyUtil.yuan_to_fen('0.5')    # 50
MoneyUtil.yuan_to_fen('0.01')   # 1

税价计算

默认增值税率为 13%(中国标准增值税率),可通过参数自定义:

from decimal import Decimal

# 不含税价 → 含税价
MoneyUtil.gross_price(Decimal('100'))            # Decimal('113.00')
MoneyUtil.gross_price(Decimal('100'), tax_rate=8)  # Decimal('108.00')

# 含税价 → 不含税价
MoneyUtil.net_price(Decimal('113'))              # Decimal('100.00')
MoneyUtil.net_price(Decimal('108'), tax_rate=8)  # Decimal('100.00')

# 计算税额
MoneyUtil.tax_amount(Decimal('113'))             # Decimal('13.00')

利润率计算

from decimal import Decimal

# netto — 不含税金额
MoneyUtil.netto(Decimal('100'), Decimal('0.13'))  # Decimal('88.50')

# brutto — 含税金额
MoneyUtil.brutto(Decimal('100'), Decimal('0.13'))  # Decimal('113.00')

# profitMargin — 利润率
MoneyUtil.profit_margin(Decimal('100'), Decimal('80'))  # Decimal('25.00')

元/分互转(增强)

# centToYuan / yuanToCent — 与 fen_to_yuan / yuan_to_fen 相同
MoneyUtil.cent_to_yuan(100)    # Decimal('1.00')
MoneyUtil.yuan_to_cent(1.00)   # 100

税额计算(增强)

# taxAmount — 精确税额计算
MoneyUtil.tax_amount(Decimal('100'), Decimal('0.13'))  # Decimal('13.00')

备注

更多方法请参阅 API 参考 文档。