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运行的17个时新手常见错误小结
Aug 07 Python
python中lambda()的用法
Nov 16 Python
用Eclipse写python程序
Feb 10 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
Python实现爬取并分析电商评论
Jun 19 Python
超级实用的8个Python列表技巧
Aug 24 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 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 采集书并合成txt格式的实现代码
2009/03/01 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
Vue3为什么这么快
2020/09/23 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
Python中的引用和拷贝浅析
2014/11/22 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
公务员的自我鉴定
2013/10/26 职场文书
作弊检讨书1000字
2014/02/01 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
Python装饰器详细介绍
2022/03/25 Python
CentOS安装Nginx并部署vue
2022/04/12 Servers