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爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
python递归函数绘制分形树的方法
Jun 22 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
django ajax发送post请求的两种方法
Jan 05 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
基于python实现生成指定大小txt文档
Jul 20 Python
利用django创建一个简易的博客网站的示例
Sep 29 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
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
python 为什么说eval要慎用
2019/03/26 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Python 支持向量机分类器的实现
2020/01/15 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
Python 使用office365邮箱的示例
2020/10/29 Python
详解anaconda安装步骤
2020/11/23 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
人力资源管理专业学生自我评价
2013/11/20 职场文书
公司活动总结怎么写
2014/06/25 职场文书
运动会表扬稿
2015/01/16 职场文书
慰问信格式
2015/02/14 职场文书
致接力运动员加油稿
2015/07/21 职场文书