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读写及压缩和解压缩文件的示例
Jul 08 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
python实现俄罗斯方块游戏
Mar 25 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python将主机名转换为IP地址的方法
Aug 14 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
python如何获取apk的packagename和activity
Jan 10 Python
python3 使用traceback定位异常实例
Mar 09 Python
Python基于pillow库实现生成图片水印
Sep 14 Python
Python 转移文件至云对象存储的方法
Feb 07 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
做一个有下拉功能的留言版
2006/10/09 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
javascript 闭包疑问
2010/12/30 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
js图片上传的封装代码
2017/08/01 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python查看微信撤回消息代码
2018/06/07 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
Python中一些深不见底的“坑”
2019/06/12 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python 爬虫性能相关总结
2020/08/03 Python
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
清洁工表扬信
2014/01/08 职场文书
项目经理任命书
2014/06/04 职场文书
民事代理词范文
2015/05/25 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
Python基础之进程详解
2021/05/21 Python