BigDecimal Boden Rundung schief geht

Ich habe vor kurzem eine Frage über komische java-doppelter Boden Runden, und bekam Antworten zu verwenden BigDecimals statt, so versuchte Sie den folgenden code:

BigDecimal velocity = new BigDecimal(-0.07);
BigDecimal afterMultiplyingBy200 = velocity.multiply( new BigDecimal(200.0) );
BigDecimal floored = afterMultiplyingBy200.setScale(0, RoundingMode.FLOOR);
System.out.println("After multiplication " + afterMultiplyingBy200);
System.out.println("floored value is " + floored);

Und ich bekomme folgende Ergebnisse

After multiplication -14.000000000000001332267629550187848508358001708984375000
floored value is -15

Es scheint, dass sogar die Verwendung von BigDecimal-ich kann nicht richtigen Wert für die Multiplikation -0.07 200, gibt es irgendetwas was ich tun kann, um genau -14.0?

  • Wenn Sie die Frage von einer Rundung Frage zu einer Vervielfachung Frage, warum die Erhaltung der falsche Titel?
Schreibe einen Kommentar