В настоящее время у меня есть BigDecimal значения с 3 десятичными разрядами, показанные в JTable. Когда я получаю значения как 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;
}
И прекрасно работает! В любом случае большое спасибо за помощь:)