python浮点问题
求助各位大佬:最近发现
1.225 * 100 = 122.50000000000001
1.275 * 100 = 127.49999999999999
导致后面一些计算出现误差。
请问大佬们,这问题如何解决或避免 ?
我目前能想到的就是不乘100,换成 1.225 * 10 * 10
a = 1.225
print(a * 100 == a * 10 * 10)
False
b = 1.275
print(b * 100 == b * 10 * 10)
False 判断浮点数相等用math.isclose
import math
help(math.isclose) 使用Decimal类来进行高精度小数计算,要求是字符串格式的整数或者小数哟,不然还是会丢失精度的
from decimal import Decimal
结果 = Decimal('1.225') * Decimal('100')
给结果,做自定义设置,后面N为小数 3楼的高精度类型是正解 个人见解,如有错误请大佬指正
在Python中,浮点数的运算存在精度问题。浮点数是一种表示实数的方式,但它们只能以有限的精度来存储和表示。因此,在进行浮点数的乘法运算时,可能会出现舍入误差。
值得注意的是:
在进行浮点数的乘法运算时,需要注意以下几点:
1、浮点数的运算可能会引入舍入误差,导致结果不完全精确。
2、如果需要精确的小数位数,可以使用第三方库如 decimal 来进行精确计算。
3、在进行浮点数比较时,应该考虑到舍入误差的影响,并使用适当的容差范围进行比较。 示例代码:
from decimal import Decimal, getcontext
# 设置小数点后的精度
getcontext().prec = 4
# 使用Decimal进行精确计算
a = Decimal('0.1')
b = Decimal('0.2')
c = a + b
print(c)# 输出:0.3000
感谢各位大佬的回复。
已使用Decimal来解决。
df.apply(lambda x: round(Decimal(str(x)) * 100))
页:
[1]