Java 8에서는 값이 근접하여 형식화 패턴에 지정된 반올림 위치에
정확히 있는 경우
java.text.NumberFormat 및
java.text.DecimalFormat 클래스에서
format 메소드를 사용하여 10진수의 반올림 동작에서
동작 변경을 도입합니다. 이 변경은
정확하지 않은 2진 숫자 표시의 수에 적용됩니다.
예를 들어, 컴퓨터가 도달할 수 있는 0.015의 가장 가까운 2진 추정치는 0.01499999999999999944488848768742172978818416595458984375입니다. 해당 수를 2개의 숫자로 버림하는 경우 Java 8에서 .004999999....가 .005 미만이므로 답은 .01입니다. 이전 버전의 Java에서는 답이 0.02입니다.
이 규칙은 첫 번째 매개변수로 double 프리머티브 또는 java.lang.Double 오브젝트와 함께 호출되는 경우
NumberFormat 및 DecimalFormat format
메소드에 대한 호출에 플래그를
지정합니다.
다음 예제에서는 format 메소드의 사용을 표시합니다.
|
public static void main(String[] args) { java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); nf.setMaximumFractionDigits(3); double aDouble; String myStr; aDouble = 0.8055d; myStr = nf.format(aDouble); System.out.println("format(" + aDouble + ") returns \"" + myStr + "\". Expecting \"0.805\"."); nf.setMaximumFractionDigits(2); aDouble = 0.015d; myStr = nf.format(aDouble); System.out.println("format(" + aDouble + ") returns \"" + myStr + "\". Expecting \"0.01\"."); NumberFormat percent = NumberFormat.getPercentInstance(); percent.setMinimumFractionDigits(1); percent.setMaximumFractionDigits(1); percent.setRoundingMode(RoundingMode.HALF_EVEN); myStr = percent.format(0.5555); System.out.println("format(0.5555) returns \"" + myStr + "\". Expecting \"55.5%\"."); } |
Java 7을 통해 이 코드를 호출하는 경우 다음 출력이 표시됩니다.
format(0.8055) returns "0.806". Expecting "0.805".Java 8에서는 다음 출력이 표시됩니다.
format(0.8055) returns "0.805". Expecting "0.805".프로그램 출력에 영향을 미칠 수 있으므로 이 동작 변경을 주의하십시오. JDK-7131459 버그 보고서에서는 이를 회귀로 보고하는 Java 8에 반하는 버그 보고서를 포함하여 추가 정보를 제공하고 다수의 관련된 보고서를 표시합니다.
영향을 받는 클래스에 대한 자세한 정보는 다음을 참조하십시오.