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中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
Python下rrdtool模块的基本使用方法
Nov 13 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
详解python中的 is 操作符
Dec 26 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
Jun 10 Python
Django中Aggregation聚合的基本使用方法
Jul 09 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
2021年最新CPU天梯图
2021/03/04 数码科技
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
DOM 事件流详解
2015/01/20 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
jquery 判断div show的状态实例
2016/12/03 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
python九九乘法表的实例
2017/09/26 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python梯度下降算法的实现
2020/02/24 Python
django模板获取list中指定索引的值方式
2020/05/14 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
python能做哪些生活有趣的事情
2020/09/09 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
预备党员思想汇报范文
2014/01/11 职场文书
迟到检讨书800字
2014/01/13 职场文书
教师节活动主持词
2014/04/02 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python