首页 > 解决方案 > python添加浮点数并保留最大的小数部分

问题描述

在 Python 中,我添加浮点数。

我有数字

client_balance = 40360.7416622703
fund_manager_balance = 676.600516394647 
uits= 6.72791159564433

这是我的python代码

def update_client_balance(self, record):
    if record.client_id.account_name != ACCOUNT_MANAGER_NAME:
        self.client_balance += record.units

def update_manager_balance(self, record):
    if record.client_id.account_name == ACCOUNT_MANAGER_NAME:
        self.fund_manager_balance += record.units

执行这些功能后,我有

client_balance = 40360.7416622703
fund_manager_balance = 683.328427990291

现在我想手动验证这些函数的结果

所以 (client_balance + fund_manager_balance)(函数执行前) -uits - (client_balance + fund_manager_balance)(函数执行后)

按价值

40360.7416622703 + 676.600516394647 + 6.72791159564433 - (40360.7416622703 + 683.328427990291) = -0.00000000000727595761418343

它应该给我零价值,但它给了我-0.00000000000727595761418343

请帮助我如何解决这个问题?

标签: python-3.xmath

解决方案


如果您期望绝对没有小数错误,decimal那么模块适合您。例子:

from decimal import Decimal

client_balance = Decimal('40360.7416622703')
fund_manager_balance = Decimal('676.600516394647')
uits= Decimal('6.72791159564433')

new_client = client_balance # no change according to your code.
new_manager = fund_manager_balance + uits
print(new_client)
print(new_manager)
# validate
err = client_balance + fund_manager_balance + uits - (new_client + new_manager)
print(err)

输出:

40360.7416622703
683.32842799029133
0E-14

注意:对于常量,请在 Decimal 中输入String,因为如果输入 float,则在识别为 float 并更改为 Decimal 之前已经发生错误。


推荐阅读