吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 406|回复: 7
收起左侧

[求助] python浮点问题

[复制链接]
gufengaoyue 发表于 2023-10-19 10:22
求助各位大佬:
最近发现
1.225 * 100 = 122.50000000000001
1.275 * 100 = 127.49999999999999

导致后面一些计算出现误差。
请问大佬们,这问题如何解决或避免 ?

我目前能想到的就是不乘100,换成 1.225 * 10 * 10
[Python] 纯文本查看 复制代码
a = 1.225
print(a * 100 == a * 10 * 10)
False
b = 1.275
print(b * 100 == b * 10 * 10)
False

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hdydy 发表于 2023-10-19 12:06
判断浮点数相等用math.isclose
[Python] 纯文本查看 复制代码
import math
help(math.isclose)
雾霭c 发表于 2023-10-19 12:12
使用Decimal类来进行高精度小数计算,要求是字符串格式的整数或者小数哟,不然还是会丢失精度的
[Python] 纯文本查看 复制代码
from decimal import Decimal
结果 = Decimal('1.225') * Decimal('100')


sai609 发表于 2023-10-19 12:37
我心飞翔1995 发表于 2023-10-19 13:45
3楼的高精度类型是正解
MWH 发表于 2023-10-19 13:49
个人见解,如有错误请大佬指正
在Python中,浮点数的运算存在精度问题。浮点数是一种表示实数的方式,但它们只能以有限的精度来存储和表示。因此,在进行浮点数的乘法运算时,可能会出现舍入误差。

值得注意的是:
在进行浮点数的乘法运算时,需要注意以下几点:
1、浮点数的运算可能会引入舍入误差,导致结果不完全精确。
2、如果需要精确的小数位数,可以使用第三方库如 decimal 来进行精确计算。
3、在进行浮点数比较时,应该考虑到舍入误差的影响,并使用适当的容差范围进行比较。
MWH 发表于 2023-10-19 13:51
示例代码:
[Python] 纯文本查看 复制代码
from decimal import Decimal, getcontext

# 设置小数点后的精度
getcontext().prec = 4

# 使用Decimal进行精确计算
a = Decimal('0.1')
b = Decimal('0.2')
c = a + b
print(c)  # 输出:0.3000
 楼主| gufengaoyue 发表于 2023-10-20 15:40
感谢各位大佬的回复。
已使用Decimal来解决。
df.apply(lambda x: round(Decimal(str(x)) * 100))
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表