python 数字格式化那些事

        最近一个项目上一个小需求,数值进行格式化,项目环境是内网docker镜像,安装第三方不方便,尽可能选用python内置函数。1.利用千分位表示,2.保留2位小数。

话不多说,下面直接实例演示(直接上才艺)。

第一种:利用format函数实现

# format函数格式化
# 实例1
s_num = '11111.125'
# '11111.125'
s_num_1 = format(float(s_num), '.2f') # 保留2位小数
# '11111.12'
s_num_2 = format(float(s_num_1), ',') # 千分位表示
# '11,111.12'

# 实例2
s_num = '11111.1'
# '11111.1'
s_num_1 = format(float(s_num), '.2f') # 保留2位小数
# '11111.10'
s_num_2 = format(float(s_num_1), ',') # 千分位表示
# '11,111.1'

实例1和实例2对比发现,当小数点最后一位为"0"时('11111.10')千分位会自动剔除掉"0"。调研了一下format源码,没发现有可以设置的参数,需要手动调整。

s_num_len = len(s_num_2.split('.')[1])
if s_num_len == 1:
    s_num = s_num_len + '0' # 补0
else:
    s_num = s_num_2

print(s_num)
# 11111.10

回到实例1 “s_num = '11111.125'”,发现最终结果是'11,111.12',并没有按照四舍五入进行保留2为小数。查阅源码及实际测试得出,format(value, '.2f')是按照五舍六入实现小数点保留。

第二种:为了填平format函数不能四舍五入这个坑,只好继续搜索python内置标准化模块decimal,它是进行浮点数的运算和比较。

from decimal import Decimal
# 实例1
s_num = '11111.125'
# '11111.125'
s_num = float(Decimal(s_num).quantize(Decimal("0.01"), rounding = "ROUND_HALF_UP"))
# 参数rounding用来指定四舍五入
s_num_1 = format(float(s_num), '.2f') # 保留2位小数
# '11111.13'
s_num_2 = format(float(s_num_1), ',') # 千分位表示
# '11,111.13'

 以上两种方法,均可实现数字小数点保留及千分位显示。推荐使用第二种方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值