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中optparse模块使用浅析
Jan 01 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
Selenium元素的常用操作方法分析
Aug 10 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
Python骚操作之动态定义函数
Mar 26 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
Laravel框架表单验证详解
2014/09/04 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
Javascript验证方法大全
2015/09/21 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python利用ansible分发处理任务
2015/08/04 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
会计专业自荐书
2014/07/08 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js