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 zip文件 压缩
Dec 24 Python
简单了解OpenCV是个什么东西
Nov 10 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
与Django结合利用模型对上传图片预测的实例详解
Aug 07 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
selenium如何定位span元素的实现
Jan 13 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 生成随机验证码图片代码
2010/02/08 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
php DOS攻击实现代码(附如何防范)
2012/05/29 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery的三种$()
2009/12/30 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
web打印小结
2017/01/11 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
js闭包学习心得总结
2018/04/17 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
javascript中call()、apply()的区别
2019/03/21 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
信息专业本科生个人的自我评价
2013/10/28 职场文书
云冈石窟导游词
2015/02/04 职场文书
放射科岗位职责
2015/02/14 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
Go语言测试库testify使用学习
2022/07/23 Golang