python实现人性化显示金额数字实例详解


Posted in Python onSeptember 25, 2020

我们在开发过程中,有时候需要把float,int型等数字作为金额类型数字显示会出现很多问题,比如float会显示成 965868.4599999,int型没有小数位等各种各样的问题。我们需要进行转换显示,才能保证阅读人性化。

方法一:

这里只贴上主要代码:

# 金额人性化
def humanized_amount(self, *args, **kwargs):
    """
    金额人性化,保留二位小数,再进行人性化显示

    compel强制二位,默认True,
    """
    if not CheckData(self.__mark).is_int_or_float:
        return {"code": "0001", "msg": "必须传入数字", "data": None}
    else:
        figure = float(self.__mark)

    # 保留二位小数
    figure = "{:.2f}".format(figure)

    # 人性化显示
    figure = "{:,}".format(float(figure))

    if kwargs.get("compel", True):
        # 进行处理,保留二位小数,如果不足二位补领
        figure_list = figure.split(".")
        if len(figure_list[1]) == 1:
            figure += "0"

    return figure

方法二:利用xToolkit库

安装方法:

pip install xToolkit  -i  http://pypi.douban.com/simple --trusted-host pypi.douban.com

xToolkit库是我自己封装的python内置库的一个扩展库.把python的datetime,string,list,dist,xthread等数据结构进行了功能的扩展。

使用方法比较简单,一行代码即可搞定

# 金额人性化,保留二位小数

xstring.dispose(3.0).humanized_amount(compel=False)
xstring.dispose("3.0").humanized_amount(compel=True)
xstring.dispose(37787841.902).humanized_amount(compel=False)
xstring.dispose("37787841.902").humanized_amount(compel=True)
xstring.dispose(378978989).humanized_amount(compel=False)
xstring.dispose("378978989").humanized_amount(compel=True)

>>3.0
>>3.00
>>37,787,841.9
>>37,787,841.90
>>378,978,989.0
>>378,978,989.00

实例扩展:

用python实现把数字人民币金额转换成大写的脚本程序

# -*- coding: utf-8 -*-
def Num2MoneyFormat( change_number ):
  """
  .转换数字为大写货币格式( format_word.__len__() - 3 + 2位小数 )
  change_number 支持 float, int, long, string
  """
  format_word = ["分", "角", "元",
        "拾","百","千","万",
        "拾","百","千","亿",
        "拾","百","千","万",
        "拾","百","千","兆"]

  format_num = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]
  if type( change_number ) == str:
    # - 如果是字符串,先尝试转换成float或int.
    if '.' in change_number:
      try:  change_number = float( change_number )
      except: raise ValueError, '%s  can\'t change'%change_number
    else:
      try:  change_number = int( change_number )
      except: raise ValueError, '%s  can\'t change'%change_number

  if type( change_number ) == float:
    real_numbers = []
    for i in range( len( format_word ) - 3, -3, -1 ):
      if change_number >= 10 ** i or i < 1:
        real_numbers.append( int( round( change_number/( 10**i ), 2)%10 ) )

  elif isinstance( change_number, (int, long) ):
    real_numbers = [ int( i ) for i in str( change_number ) + '00' ]

  else:
    raise ValueError, '%s  can\'t change'%change_number

  zflag = 0            #标记连续0次数,以删除万字,或适时插入零字
  start = len(real_numbers) - 3
  change_words = []
  for i in range(start, -3, -1): #使i对应实际位数,负数为角分
    if 0 <> real_numbers[start-i] or len(change_words) == 0:
      if zflag:
        change_words.append(format_num[0])
        zflag = 0
      change_words.append( format_num[ real_numbers[ start - i ] ] )
      change_words.append(format_word[i+2])

    elif 0 == i or (0 == i%4 and zflag < 3):  #控制 万/元
      change_words.append(format_word[i+2])
      zflag = 0
    else:
      zflag += 1

  if change_words[-1] not in ( format_word[0], format_word[1]):
    # - 最后两位非"角,分"则补"整"
    change_words.append("整")

  return ''.join(change_words)

print Num2MoneyFormat( 343.45 )

到此这篇关于python实现人性化显示金额数字实例详解的文章就介绍到这了,更多相关python实现人性化显示金额数字内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单文件操作python 修改文件指定行的方法
May 15 Python
记录Django开发心得
Jul 16 Python
深入解析Python中的线程同步方法
Jun 14 Python
Centos Python2 升级到Python3的简单实现
Jun 21 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
AI人工智能 Python实现人机对话
Nov 13 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
python验证身份证信息实例代码
May 06 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
Python使用openpyxl批量处理数据
Jun 23 Python
python 绘制正态曲线的示例
Sep 24 #Python
Python爬取网页信息的示例
Sep 24 #Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 #Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 #Python
python绘制分布折线图的示例
Sep 24 #Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 #Python
python 如何调用 dubbo 接口
Sep 24 #Python
You might like
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
js实现无缝轮播图
2020/03/09 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
介绍Python的Django框架中的QuerySets
2015/04/20 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
高中生家长会演讲稿
2014/01/14 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
环保专项行动方案
2014/05/12 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
贷款收入证明范本
2015/06/12 职场文书
公司开业致辞
2015/07/29 职场文书
python 调用js的四种方式
2021/04/11 Python
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers