目前,我在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/