Я прочитал несколько постов в похожих строках, где мы пытаемся сравнить два числа с плавающей запятой (да, это ошибка с плавающей запятой) на основе относительного допуска и натолкнулись на math.isClose()
и numpy.isclose()
api.Эти API прекрасно работают, но мое требование - найти, находится ли вычитание двух чисел с плавающей точкой в пределах порога.Так что, если я найду меньше или больше чем равно, это будет работать для меня.
Любая идея, как я могу решить эту проблему?
import numpy
import pandas as pd
from decimal import Decimal
data = {'first': [1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.80], 'second': [1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.80, 1.81]}
df = pd.DataFrame(data, columns = ['first', 'second'])
df['isGtEq'] = df.apply (lambda row: (row['first'] - row['second']) >= 0.01, axis=1)
df['isclose'] = df.apply (lambda row: numpy.isclose(row['first'], row['second'], atol=0.01), axis=1)
df['absdiff'] = df.apply (lambda row: abs(row['first'] - row['second']), axis=1)
df['dec_diff'] = df.apply (lambda row: Decimal(row['first'] - row['second']), axis=1)
Результат выполнения выше:
first second isGtEq isclose absdiff \
0 1.71 1.72 False True 0.01
1 1.72 1.73 False True 0.01
2 1.73 1.74 False True 0.01
3 1.74 1.75 False True 0.01
4 1.75 1.76 False True 0.01
5 1.76 1.77 False True 0.01
6 1.77 1.78 False True 0.01
7 1.78 1.79 False True 0.01
8 1.79 1.80 False True 0.01
9 1.80 1.81 False True 0.01
dec_diff
0 -0.0100000000000000088817841970012523233890533...
1 -0.0100000000000000088817841970012523233890533...
2 -0.0100000000000000088817841970012523233890533...
3 -0.0100000000000000088817841970012523233890533...
4 -0.0100000000000000088817841970012523233890533...
5 -0.0100000000000000088817841970012523233890533...
6 -0.0100000000000000088817841970012523233890533...
7 -0.0100000000000000088817841970012523233890533...
8 -0.0100000000000000088817841970012523233890533...
9 -0.0100000000000000088817841970012523233890533...