目前,我在JTable中显示的BigDecimal值具有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);
    }
}


但这根本没有区别。

还有其他想法吗?

编辑:最终我在Internet上找到了一个解决方案:

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;
}


而且效果很好!无论如何,非常感谢您的帮助:)

最佳答案

第一个比较是错误的,因为您使用不同的小数位数-value2有2,value3有3。如果使它们相同,则可以
如果您只想显示内容,则不需要BigDecimal。十进制格式应该可以,但是您还应该将最大分数位数设置为1

关于java - DecimalFormat小数位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6649216/

10-11 16:26