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 24 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
python根据txt文本批量创建文件夹
Dec 08 Python
python实现邮件发送功能
Aug 10 Python
解决python replace函数替换无效问题
Jan 18 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 Python
基于python的matplotlib制作双Y轴图
Apr 20 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
ExtJS的拖拽效果示例
2013/12/09 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
javascript 实现map集合
2015/04/03 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
jQuery实现tab栏切换效果
2020/12/22 jQuery
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
Python爬取京东的商品分类与链接
2016/08/26 Python
python逆序打印各位数字的方法
2018/06/25 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
一份恶作剧的检讨书
2014/09/13 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
nginx静态资源的服务器配置方法
2022/07/07 Servers