目前,我有一个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;
}
效果很好!非常感谢你的帮助:)
答案 0 :(得分:0)
对格式化程序
尝试使用此格式#.0##
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试这样做,
DecimalFormat df = new DecimalFormat("#.#");
df.format(2.500); // returns 2.5
df.format(1.000); // returns 1.0