A Java 8 bemutatja a decimális számok kerekítési viselkedését a formátum módszer használatával a en
java.text.NumberFormat
és a
java.text.DecimalFormat
Osztályok, amikor az érték nagyon közel van egy nyakkendőhöz, pontosan a formázási mintában megadott kerekítési pozícióban. A változás az
olyan számokra van hatással, amelyek bináris numerikus ábrázolása nem
pontos.
Például a 0.015 számítógép által elérhető legközelebbi bináris közelítése 0.01499999999999999944488848768742172978818416595458984375. Ha ezt a számot két számjegyre kerekíti, a Java 8-ban a válasz .01, mert .004999999 ... Kevesebb mint .005. A Java korábbi változataiban a válasz 0.02.
Ez a szabály megjelöli a NumberFormat és
DecimalFormat format metódusokat, amikor ezek
egy double primitívvel vagy egy java.lang.Double
objektum első paramétereként vannak meghívva.
A következő példa a format metódusok használatát mutatja
be.
Ha ezt a kódot Java 7 használatával hívja meg, akkor a következő kimenet jelenik meg:
format(0.8055) a "0.806" értéket adja vissza. A várt érték "0.805".Java 8 használata esetén a következő kimenet jelenik meg:
formátum (0.8055) a "0.805" értéket adja vissza. A várt érték "0.805".Legyen tudatában ennek a viselkedésváltozásnak, mert hatással lehet a program kimenetére. A JDK-7131459 hibajelentés további információkat ad, és bemutat több kapcsolódó jelentést, beleértve a Java 8 hibajelentéseket, amelyeknek ez a jelentés a regressziója.
Az érintett osztályokkal kapcsolatos további információkat a következő helyeken talál: