金融行业的同学,经常会遇到“钱”的转换问题,在进行金额的计算和转化时,稍微有不慎,则会损失惨重。

1、带来经济损失,可能比较微小,

2、严重影响了后续的日终对账业务,

3、客户的投诉也会比较严重,严重影响公司的形象。

因而,在使用Python的时候,需要学会算明白“钱”。

先看一个例子,由“元”转换为“分”, Python代码如下:

>>> a = 66.9

>>> a * 100

6690.000000000001

咦,是不是令你大吃一惊?这么简单的运算Python竟然会有误?

确实转换为分之后竟然少了0.000000000001。这种微小的差别对于日终对账是致命的,可能运维人员需要排查一整晚,为了这小小的0.000000000001。有人可能说,这个问题简单,直接取整就可以了。代码如下:

>>> round(a * 100)

6690

事情真没有这么简单,金融计算对精度的要求不是一般高,四舍五入的操作同样会导致账目不平。

那么,如何Python如何计算“钱”呢?本文介绍两种方式。

使用定点数

其中一个方式是采用定点数。字面意思看,小数点位置是固定的,即约定机器中所有数据的小数点位置是不变的。这能够确保精度。

import decimal

>>> a = 66.9

>>> print(int(decimal.Decimal(str(a)) * decimal.Decimal(100)))

6690

使用库money

首先给出文档地址:

money库,顾名思义,就是解决“钱”相关的问题。安装很简单,

pip install money

使用起来也比较简单,Money对象入参有两个,一个是数量,一个是货币单位。创建完Money对象,就可以做各种操作了:

from money import Money

m = Money(amount='66.9', currency='RMB')

print(m * 100)

遗憾的是,没提供内置函数来实现元和角、分的转换。

那Money对象的实现原理是什么呢?可以看一下Money对象的定义:

class Money(object):

"""Money class with a decimal amount and a currency"""

def __init__(self, amount="0", currency=None):

try:

self._amount = decimal.Decimal(amount)

except decimal.InvalidOperation:

raise ValueError("amount value could not be converted to "

"Decimal(): '{}'".format(amount)) from None

if currency in [None, False, '']:

raise ValueError("invalid currency value: '{}'".format(currency))

if not REGEX_CURRENCY_CODE.match(currency):

raise ValueError("currency not in ISO 4217 format: "

"'{}'".format(currency))

self._currency = currency

@property

def amount(self):

return self._amount

@property

def currency(self):

return self._currency

从代码中可以看出,Money对象有2个属性,一个是_amount,一个是_currency。其中,_amount在初始化时,也是将传入的值转化为定点数,其本质也是依赖于定点数。

所以,后续使用Python计算“钱”时,一定要用定点数,浮点数是算不明白“钱”的哦。

推荐一下我的Python的学习裙【 784758214 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!希望新手少走弯路

不要太过急功近利, 慢慢玩, 精进.

如果你觉着编程有趣, 成长也就不再痛苦, 祝学习愉快.

python使用需要钱吗-万能的Python竟然算不明白“钱”?损失惨重!相关推荐

  1. 赚的钱不花掉就不算自己的钱?

    (本文内容整理自我在鸿学金信赢在青年-工薪青年投资理财培训中所讲的部分内容,希望能给广大的工薪青年白领们在规划自己的人生财富时提供一定的参考意见!) 上一节课 我们讲到了为了让了要弥补人生财富的巨额亏 ...

  2. 什么lol云顶之奕小助手小蜜蜂肝不完了?让万能的python来帮你

    前言 最近的小蜜蜂路线皮肤非常可爱,但是上班族又没时间刷刷刷. 瞬间想到万能的python来代替本人肝皮肤. 核心库PyAutoGui pyautogui介绍 项目地址 https://github. ...

  3. 万能神器python

    Python除了不能帮你生孩子,什么都能做! "朋友最近跟师兄学瞭个黑科技,每天鼓捣一下,俩月挣瞭几万块." 他还趁着挖礦热潮,倒卖瞭一波原价显卡,4张華硕 RTX 3080Ti, ...

  4. python运维工程师待遇_会Python的运维工程师能挣多少钱?

    或许你经常听说,一个高级运维必须会Python.一个不会Python的运维拿不了高薪.那么,Python和运维的关系是什么呢?为什么Python更适合做运维?今天达妹就来带你详细看一下. 工作一年以上 ...

  5. python学完多少钱_Python学完后一般能拿多少钱?老男孩Python课程学习

    Python是一门非常不错的编程语言,在目前市场上应用范围非常广阔,在众多领域都可以看到Python的身影,除了是人工智能.数据分析的首选语言之外,在自动化运维.自动化测试.全栈开发等都有非常重要的优 ...

  6. 学python是属于什么行业_学Python能挣多少钱?哪些人适合学Python?

    Python是一门非常不错的编程语言,在目前市场上应用范围非常广阔,在众多领域都可以看到Python的身影,除了是人工智能.数据分析的首选语言之外,在自动化运维.自动化测试.全栈开发等都有非常重要的优 ...

  7. pygame为游戏添加背景_万能的Python和Pygame模块构建一个游戏框架

    通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示 ...

  8. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)

    一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...

  9. html5与python工资对比_求助各位,python和前端html5如何选择?

    我讲句实在话 学前端 python 的工资当然高, 问题是你入行打算怎么办, 你可以搜一下入行的岗位, 有几个用 python 的? 就算中高端职位, python 基本也都是辅助工种 当然他们会告诉 ...

最新文章

  1. Dundas使用手册
  2. python 对角化 特征值 特征向量
  3. 一脸懵逼学习Storm的搭建--(一个开源的分布式实时计算系统)
  4. JAVA-微信支付开发
  5. 创建安全 Windows CE 设备(转)
  6. c语言程序设计课件第二章,c语言程序设计课件张元国 ISBN9787566300386 PPT第二章数据类型 运算符与表达式...
  7. mongo DB for C#
  8. Java基础入门笔记-关系操作符
  9. 汇编语言:编写code段中代码,将a段和b段中的数据依次相加,将结果放到c段
  10. 50道基础的java面试题
  11. 从web页面请求的历程出发了解计算机网络的基础知识
  12. 【自然语言处理系列】预训练模型原理和实践综述 | 附汇报PPT原稿和18篇论文
  13. Oracle数据库 入门教程
  14. 汽车汽配行业供应链协同管理系统一体化管理,SCM供应链提升企业竞争力
  15. JQuery超链接鼠标提示效果
  16. Active Format Description (AFD)简介
  17. 美国德保罗大学计算机排名,2018福布斯美国最佳大学排名德保罗大学排名第243...
  18. jmeter+ant+jenkins接口自动化测试框架
  19. Unity中的矩阵含义
  20. 三星android pie更新,三星Android Pie更新路线图公布 Galaxy Note9需等明年二月

热门文章

  1. selenium3 浏览器驱动下载及验证
  2. [转]使用rosbridge协议实现安卓跟ros的解耦
  3. windows mongodb 安装
  4. [LeetCode] Search Insert Position 搜索插入位置
  5. C# TCP sever client
  6. 免费Apk盈利之路:嵌入AdMob广告
  7. AC-Tek Sidewinder v7.2.2 输送机设计+IDEA StatiCa v9.1.31.50722 钢结构混凝土结构件设计...
  8. 可能会用到的弹出框用法
  9. LruCache缓存机制
  10. 20170728上课笔记