Десятичный формат десятичных знаков - PullRequest
1 голос
/ 11 июля 2011

В настоящее время у меня есть 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;
}

И прекрасно работает! В любом случае большое спасибо за помощь:)

Ответы [ 3 ]

0 голосов
/ 11 июля 2011
  • первое сравнение неверно, потому что у вас разные масштабы - значение2 имеет 2, а значение3 имеет 3. Если вы делаете их одинаковыми, это работает
  • , вам не нужен BigDecimal, если выхочу показывать вещи.Десятичный формат должен работать, но вы также должны установить максимальные дробные цифры в 1
0 голосов
/ 11 июля 2011

Попробуйте сделать так,

DecimalFormat df = new DecimalFormat("#.#");
df.format(2.500);   // returns 2.5
df.format(1.000);   // returns 1.0
0 голосов
/ 11 июля 2011

Попробуйте этот формат #.0## для форматера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...