import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;/**
 * @version 1.0 12/03/98
 */class DecimalRenderer extends DefaultTableCellRenderer {
  DecimalFormat  formatter;
  
  DecimalRenderer(String pattern) {
    this(new DecimalFormat(pattern));
  }
  
  DecimalRenderer(DecimalFormat formatter) {
    this.formatter = formatter;
    setHorizontalAlignment(JLabel.RIGHT);
  }
  
  public void setValue(Object value) { 
    setText((value == null) ? ""
      : formatter.format(((Double)value).doubleValue())); 
  }
}public class TotalRowExample extends JFrame {
  final private int TOTAL_ROW    = 3;
  final private int TOTAL_COLUMN = 1;  TotalRowExample() {
    super( "Total Row Example" );    final DecimalFormat formatter = new DecimalFormat("###,##0.00");
    DefaultTableModel dm = new DefaultTableModel() {
      public void setValueAt(Object value, int row, int col) {
        Vector rowVector = (Vector)dataVector.elementAt(row);
        if (col == TOTAL_COLUMN) {      
          Double d = null;
          if (value instanceof Double) {
            d = (Double)value;
          } else {
            try { 
              d = new Double(
                ((Number)formatter.parse((String)value)).doubleValue());
            } catch (ParseException ex) {
              d = new Double(0.0);
            }
          }
          rowVector.setElementAt(d, col);
        } else {
          rowVector.setElementAt(value, col);
        }
      }
      
      public boolean isCellEditable(int row, int col) {
        if (row == TOTAL_ROW) return false;
        return true;
      }  
          
      public Class getColumnClass(int col) {
        if (col == TOTAL_COLUMN) return Number.class;
        return String.class;
      }
    };
    
    dm.setDataVector(
      new Object[][]{
        {"coffee",new Double(0.0)},
        {"tea"   ,new Double(0.0)},
        {"cocoa" ,new Double(0.0)},
        {"total" ,new Double(0.0)}},
      new Object[]{"Item","Price"});
    
    JTable table = new JTable( dm ) {
      public void editingStopped(ChangeEvent e) {
        super.editingStopped(e);
        reCalcurate(getModel());
        repaint();
      }
    };
    
    table.getColumn("Price").setCellRenderer(
             new DecimalRenderer(formatter));
    
    JScrollPane scroll  = new JScrollPane(table);    
    Container content = getContentPane();
    content.add(scroll);  
    setSize( 300, 120 );
    setVisible(true);
  }
  
  private void reCalcurate(TableModel ml) {
    if (ml == null) return;
    double total = 0.0;
    for (int i=0;i<TOTAL_ROW;i++) {
      total += ((Double)ml.getValueAt(i,TOTAL_COLUMN)).doubleValue();
    }
    ml.setValueAt(new Double(total),TOTAL_ROW,TOTAL_COLUMN);
  }  public static void main(String[] args) {
    TotalRowExample frame = new TotalRowExample();
    frame.addWindowListener( new WindowAdapter() {
      public void windowClosing( WindowEvent e ) {
System.exit(0);
      }
    });
  }
}

解决方案 »

  1.   

    保留两位小数可以采用如下算法:
    double dbl = 3.3123143
    Math.round(dbl*100)/100.00
      

  2.   

    有几种方法都可实现
    1。
    import java.text.DecimalFormat;String a = new DecimalFormat("###,###,###.##").format(100.515 );
    //System.out.println("the a is:"+a); a=100.522.
    import java.text.DecimalFormat;private static DecimalFormat format = new DecimalFormat();format.applyPattern("###,###.##");
    String a = format.format(100.515);
    //System.out.println("the a is:"+a); a=100.52以上是简单的例子,我没有写全,不过你可以看出用法,也可根据需要,自己写个方法。
    要是好用了,别忘给分。
      

  3.   

    接上,把table中的数值处理后在加到table上。
      

  4.   

    (float)Math.round(100.9999 * 100) /100