[英]Compare that BigDecimal value and double value are equal to two decimal places
我正在使用一個返回雙精度值的API。 我需要將該值與BigDecimal值進行比較,以等於兩位小數位。
我應該將BigDecimal轉換為double然后比較
Math.abs(myBigDecimal.doubleValue() - apiDouble) >= .01
還是這種方法有問題? 也許我應該將double轉換為BigDecimal,然后進行比較?
否。盡管IEEE double具有保護位,但它不能精確表示十進制值。 使用舍入將double轉換為BigDecimal,然后使用compareTo()。 請注意,equals()考慮了小數位,因此compareTo()更安全。 您可能還需要舍入BigDecimal。
移位所需的小數位數,將它們的雙精度數乘以100,使用Math.ceil或Math.floor(如您所願)以除去其余的小數位數:
Math.ceil(myBigDecimal.doubleValue()*100) == Math.ceil(apiDouble*100)
這等效於不舍入而截斷。 如果您擔心舍入,請乘以1000,將長除數除以10並進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.