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

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

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 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!希望新手少走弯路

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

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

15944439d15f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值