Java 8 zavádí změnu chování v chování zaokrouhlování desetinných čísel pomocí metody format na
java.text.NumberFormat
a také
java.text.DecimalFormat
třídy, když je hodnota velmi blízko k remíze, sedí přesně na pozici zaokrouhlení uvedené ve formátovacím vzoru. Změna ovlivňuje čísla s binárním číselným znázorněním, které není přesné.
Například nejbližší binární aproximace čísla 0.015, kterou počítač může dosáhnout, je 0.01499999999999999944488848768742172978818416595458984375. Když se číslo zaokrouhluje na dvě číslice v prostředí Java 8, bude výsledek .01, protože .004999999 .... je menší než .005. V předchozích verzích Java by byl výsledek 0.02.
Toto pravidlo označí volání metod NumberFormat a DecimalFormat format v případě, že jsou volány s primitivem double nebo java.lang.Double jako prvním parametrem.
Následující příklad zobrazuje použití metod format.
Voláte-li tento kód pomocí Java 7, zobrazí se následující výstup:
formát(0,8055) vrátí hodnotu „0,806“. Očekává se „0,805“.V Java 8 se zobrazí následující výstup:
formát(0,8055) vrátí „0,805“. Očekává se „0,805“.Uvědomte si toto chování, protože to může ovlivnit výstup programu. V hlášení o chybě JDK-7131459 naleznete další informace a také další související hlášení, včetně hlášení chyb Java 8, které toto uvádí jako regresi.
Další informace o ovlivněných třídách viz následující zdroje: