簡體   English   中英

如何在python中將Python浮點數與Mysql十進制進行比較?

[英]How to compare a Python float with a Mysql decimal in python?

我在mysql中將價格存儲為小數(8,2),我需要將相等與python中的浮點數進行比較。

假設我的數據庫中有4.28 ,然后select return price = (Decimal(4.28),) 我將其轉換為十進制十進制decimal.Decimal(price[0]) python十進制,但decimal.Decimal(price[0]) == 4.28返回false。

除了將差與一個較小的數字進行比較之外,是否有其他方法可以直接比較相等性,即, decimal.Decimal(price[0]) - decimal.Decimal(4.28) < 0.01

謝謝

不,沒有其他方法可以比較數字的浮點表示形式是否相等,但是有一些方法可以使其實用:

decimal.Decimal(price[0]) - decimal.Decimal(4.28) < 0.01

確實應該是:

abs(decimal.Decimal(price[0]) - decimal.Decimal(4.28)) < 0.01

您可以抽象比較:

def almost_equal(a, b, epsilon=1e-5):
    """returns true is the absolute value of the difference between a & b 
    is less than epsilon i/e a & b are almost equal, False otherwise
    """
    return abs(a - b) < epsilon

您需要將要比較的內容轉換為小數:

decimal.Decimal('4.28') == decimal.Decimal(price[0])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM