DecimalFormat小数位

时间:2011-07-11 11:11:44

标签: java formatting

目前,我有一个BigDecimal值,在JTable中显示3个小数位。当我得到2.500或1.000的值时,我想要2.5和1.0。这就是我尝试这个的原因:

                    BigDecimal value;
                BigDecimal value3 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(3, BigDecimal.ROUND_HALF_UP);
                BigDecimal value2 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(2, BigDecimal.ROUND_HALF_UP);
                if(valor3.equals(value2))
                {
                    BigDecimal value1 = new BigDecimal((String)model.getValueAt(e.getLastRow(), 1)).setScale(1, BigDecimal.ROUND_HALF_UP);
                    if(value3.equals(value1))
                        value = valuer1;
                    else
                        value = value2;
                }
                else
                    value = value3;

但它不起作用。它看起来像'2.500'.equals('2.5')是假的。

我还尝试在其渲染器中为JTable提供格式:

 class paramRenderer extends DefaultTableCellRenderer
{
    private final DecimalFormat formatter = new DecimalFormat( "#.000" );

    public void setValue() {    
        formatter.setMinimumFractionDigits(1);
        formatter.setMaximumFractionDigits(3);
    }
}

但它没有任何区别。

还有其他想法吗?

编辑:最后我通过互联网找到了解决方案:

BigDecimal trim(BigDecimal n)
{
    try
    {
        while (true)
        {
            n = n.setScale(n.scale()-1);
        }
    }
    catch (ArithmeticException e)
    {
        // Not "real" error: No more trailing zeroes -> Just exit // setScale() tries to eliminate a non-zero digit -> Out of the loop // Remember exceptions are not recommended for exiting loops, but this seems to be the best way...
    }

    return n;
}

效果很好!非常感谢你的帮助:)

3 个答案:

答案 0 :(得分:0)

对格式化程序

尝试使用此格式#.0##

答案 1 :(得分:0)

  • 第一个比较是假的,因为你有不同的比例 - value2有2而value3有3.如果你使它们相同,它可以工作
  • 如果您只想显示内容,则不需要BigDecimal。小数格式应该有效,但您还应将最大小数位数设置为1

答案 2 :(得分:0)

尝试这样做,

DecimalFormat df = new DecimalFormat("#.#");
df.format(2.500);   // returns 2.5
df.format(1.000);   // returns 1.0