-
Bug
-
Resolution: Unresolved
-
P4
-
8, 9
-
Fix Understood
-
generic
-
generic
FULL PRODUCT VERSION :
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 10.0.14393]
A DESCRIPTION OF THE PROBLEM :
When using java.text.DecimalFormat with RoundingMode.UP there is the following special case in which rounding does produce a wrong result:
I try to format the double value 0.0001 with RoundingMode UP to a String rounded to two decimal place.
As result I expect the String "0,01" but I get the String "0,00"
When I format the double value 1.0001 with the same options I get the String "1.01" as expected when rounding to two decimal places with RoundingMode UP.
The first case I mentioned is wrong behaviour.
UP RoundingMode must not produce a String representing a double value that is smaller than the input double value. The javadoc of RoundingMode.UP says " Note that this rounding mode never decreases the magnitude of the calculated value." which is violated by the special case mentioned above.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Code example that shows the bevaviour:
double dVal = 0.0001;
DecimalFormat df = new DecimalFormat();
df.setRoundingMode(RoundingMode.UP);
df.applyPattern("0.00");
String result = df.format(dVal));
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
result should be "0,01"
ACTUAL -
result is "0,00"
REPRODUCIBILITY :
This bug can be reproduced always.
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 10.0.14393]
A DESCRIPTION OF THE PROBLEM :
When using java.text.DecimalFormat with RoundingMode.UP there is the following special case in which rounding does produce a wrong result:
I try to format the double value 0.0001 with RoundingMode UP to a String rounded to two decimal place.
As result I expect the String "0,01" but I get the String "0,00"
When I format the double value 1.0001 with the same options I get the String "1.01" as expected when rounding to two decimal places with RoundingMode UP.
The first case I mentioned is wrong behaviour.
UP RoundingMode must not produce a String representing a double value that is smaller than the input double value. The javadoc of RoundingMode.UP says " Note that this rounding mode never decreases the magnitude of the calculated value." which is violated by the special case mentioned above.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Code example that shows the bevaviour:
double dVal = 0.0001;
DecimalFormat df = new DecimalFormat();
df.setRoundingMode(RoundingMode.UP);
df.applyPattern("0.00");
String result = df.format(dVal));
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
result should be "0,01"
ACTUAL -
result is "0,00"
REPRODUCIBILITY :
This bug can be reproduced always.
- csr for
-
JDK-8308798 Wrong behavior of DecimalFormat with RoundingMode.UP in special case
- Provisional
- relates to
-
JDK-8057170 [Fmt-De] DecimalFormat produces wrong format() results in a few non HALF_* corner cases
- Open
- links to
-
Review openjdk/jdk/14110