JDK-4329840 : DecimalFormat incorrectly formats BigDecimals
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.text
  • Affected Version: 1.0,1.2.1
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_nt
  • CPU: x86
  • Submitted: 2000-04-12
  • Updated: 2001-02-02
  • Resolved: 2001-02-02
Related Reports
Duplicate :  
Duplicate :  
Description

Name: stC104175			Date: 04/12/2000


java version "1.2.1"
Classic VM (build JDK-1.2.1-A, native threads)

DecimalFormat incorrectly formats BigDecimals.
Here is a small Program:

import java.math.BigDecimal;
import java.text.*;
import java.util.Locale;
public class DecimalFormatTest {
  public static void main(String[] args) {
    DecimalFormat format =
        (DecimalFormat)NumberFormat.getInstance(Locale.GERMANY);
    StringBuffer buf = new StringBuffer(30);
    format.format(new BigDecimal("9876543210987654321"),buf,new
        FieldPosition(0));
//  format.format(new BigDecimal("987654321098765432"),buf,new
        FieldPosition(0));
//  format.format(new BigDecimal("98765432109876543"),buf,new FieldPosition(0));
//  format.format(new BigDecimal("9876543210987653"),buf,new FieldPosition(0));
    System.out.println(buf);
  }
}

Try any of the formattings, each is wrong.
Output first value:   9.876.543.210.987.655.000
Output second value:  987.654.321.098.765.440
Output third value:   98.765.432.109.876.544
Output fourth value:  9.876.543.210.987.652
(Review ID: 103569) 
======================================================================
From bug 4330671:

Name: stC104175			Date: 04/14/2000


Java Version JDK 1.2.2



Formatting large double values with java.text.FormatDecimal changes the value
that should be formatted. (see Screenshot).
Formatting is done by

  void input_focusLost(FocusEvent e) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    DecimalFormat decForm = new DecimalFormat("###,###,###.00", symbols);
    output.setText(decForm.format( new Float(input.getText()).floatValue()));
  }

if you enter:
'666333999000' the result is
666,334,003,200.00
(Review ID: 103694) 
======================================================================

Comments
WORK AROUND Name: stC104175 Date: 04/12/2000 None. ======================================================================
11-06-2004

EVALUATION NumberFormat.format simply calls BigDecimal.doubleValue to convert to a double, thus losing precision. norbert.lindenberg@Eng 2000-04-12
12-04-2000