In einer Java-Anwendung ich einen Komponententest, die die folgende Situation enthält:Warum dieser Vergleich zwischen 2 BigDecimal fehlschlagen?
BigDecimal rendimentoLordoProvvisiorioExpected = new BigDecimal(2.85000);
BigDecimal rendimentoLordoProvvisiorioDB = null;
rendimentoLordoProvvisiorioDB = pucManager.getRendimentoLordoProvvisorio(date);
assertTrue(rendimentoLordoProvvisiorioExpected.compareTo(rendimentoLordoProvvisiorioDB) == 0);
der Wert des rendimentoLordoProvvisiorioExpected Variable manuell 2,85000 und der erhaltene Wert rendimentoLordoProvvisiorioDB setted ist 2,85000 .
Das Problem ist, dass, wenn ich tue, um diesen Vergleich in den assertTrue() JUnit Funktion
assertTrue(rendimentoLordoProvvisiorioExpected.compareTo(rendimentoLordoProvvisiorioDB) == 0);
es scheitern, weil die rendimentoLordoProvvisiorioExpected2,850000000000000088817841970012523233890533447265625 und nicht 2,85000 (als setted zu sein scheint).
Warum? Wie kann ich den vorherigen Code ändern, um rendimentoLordoProvvisiorioExpected auf den erwarteten Wert 2.85000 zu setzen?
Sie initialisieren "RendimentoLordoProvvisiorioExpected" mit einem Double, das nicht präzise ist. Versuchen Sie stattdessen, es mit einem String zu initialisieren. – hotzst
Ich frage mich, warum Sie nicht einmal gelesen haben, was der JavaDoc von ['BigDecimal (double)'] (https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html#BigDecimal -doppelt-). Es sagt Ihnen, dass "double" nicht genau ist, was Sie stattdessen verwenden sollten. – Tom