首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将四舍五入的值存储在表中而不只是将其显示为四舍五入

如何将四舍五入的值存储在表中而不只是将其显示为四舍五入
EN

Stack Overflow用户
提问于 2014-06-05 13:38:05
回答 1查看 83关注 0票数 0

我有一个表格,其中我需要把数字四舍五入到小数点后4位。我成功地做到了这一点,但问题是,当表显示四舍五入的值时,实际存储的值并不是四舍五入的值(我使用BigDecimal是因为我希望能够控制单元格的舍入行为)。在打印单元格值时,即使表中显示的值是四舍五入的值,也会得到小数超过4个的数字。我写了我自己的编辑和渲染器如下:

代码语言:javascript
代码运行次数:0
运行
复制
class DoubleEditor4 extends DefaultCellEditor {

    public DoubleEditor4() {
        super(new JFormattedTextField());
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        JFormattedTextField editor = (JFormattedTextField) super.getTableCellEditorComponent(table, value, isSelected, row, column);
        if (value!=null){
            String num = (String) value;
            BigDecimal num2 = new BigDecimal(num).setScale(4, BigDecimal.ROUND_HALF_UP);
            String text = num2.toString();
            editor.setHorizontalAlignment(SwingConstants.RIGHT);
            editor.setText(text);
        }
        return editor;
    }   
}

class DoubleRenderer4 extends DefaultTableCellRenderer {
    public DoubleRenderer4() { 
        super();
        this.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        value = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column );
    }

    public void setValue(Object value) {
        BigDecimal num2 = new BigDecimal(value.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
        String text = num2.toString();
        setText(text);
    }
}

如果表模型中存储的值不是四舍五入的值,那么我做错了什么呢?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-07 14:08:43

通过在单元编辑器类中重写getCellEditorValue()方法,我设法解决了这个问题:

代码语言:javascript
代码运行次数:0
运行
复制
@Override
public Object getCellEditorValue() {
    Object v = super.getCellEditorValue();
    BigDecimal n = new BigDecimal(v.toString()).setScale(4, BigDecimal.ROUND_HALF_UP);
    return n.toString();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24061770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档