(submitting this on behalf of Roman Ushakov)
See this test:
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
class HalfUpBug {
public static DecimalFormat createDecimalFormat(int accuracy) {
DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
symbols.setDecimalSeparator('.');
format.setDecimalFormatSymbols(symbols);
format.setMinimumFractionDigits(accuracy);
format.setMaximumFractionDigits(accuracy);
return format;
}
public static void main(String[] args) {
final DecimalFormat decimalFormat = createDecimalFormat(2);
System.out.println(decimalFormat.format(16.665));
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(decimalFormat.format(16.665));
}
}
On current jdk/jdk it produces:
16.66
16.66
...while users expect it to be 16.67.
It looks similar to already fixedJDK-8039915.
See this test:
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
class HalfUpBug {
public static DecimalFormat createDecimalFormat(int accuracy) {
DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
symbols.setDecimalSeparator('.');
format.setDecimalFormatSymbols(symbols);
format.setMinimumFractionDigits(accuracy);
format.setMaximumFractionDigits(accuracy);
return format;
}
public static void main(String[] args) {
final DecimalFormat decimalFormat = createDecimalFormat(2);
System.out.println(decimalFormat.format(16.665));
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(decimalFormat.format(16.665));
}
}
On current jdk/jdk it produces:
16.66
16.66
...while users expect it to be 16.67.
It looks similar to already fixed
- relates to
-
JDK-8039915 Wrong NumberFormat.format() HALF_UP rounding when last digit exactly at rounding position greater than 5
-
- Closed
-