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的Django框架中的ORM建立查询API
Apr 20 Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
pandas 读取各种格式文件的方法
Jun 22 Python
对Python中plt的画图函数详解
Nov 07 Python
python的列表List求均值和中位数实例
Mar 03 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
python如何在word中存储本地图片
Apr 07 Python
Python WSGI 规范简介
Apr 11 Python
Python初学者必备的文件读写指南
Jun 23 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的知识
2006/11/17 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
JavaScript中的逻辑判断符&amp;&amp;、||与!介绍
2014/12/31 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Python中os.path用法分析
2015/01/15 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
实践Vim配置python开发环境
2018/07/02 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
浅析Python 责任链设计模式
2020/09/11 Python
用python读取xlsx文件
2020/12/17 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
客服工作职责
2013/12/11 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
房地产项目建议书
2014/03/12 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
岗位明星事迹材料
2014/05/18 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
男生贾里读书笔记
2015/06/30 职场文书
签字仪式主持词
2015/07/03 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android