Number Format

Eis a seguinte situação:

Estou encontrando um erro (java.lang.IllegalArgumentException: Cannot format given Object as a Number
)
na hora de formatar um campo double, já tentei 999 formas e nada :confused:
Segue o código:

    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(2);
    public String getTotal(){
        val1 = Double.valueOf(str1).doubleValue();
        val2 = Double.valueOf(str2).doubleValue();
        total = val1 + val2;
        totalFinal = Double.toString(total);
        return nf.format(totalFinal);
    }

esse método retorna uma String que deverá ser utilizada para compor os dados de uma jTable, desse modo, na classe dessa jTable esse valor (objeto.getTotal()) está sendo usado dentro de um Prepared Statement da seguinte forma:

ps.setString(1, objeto.getTotal());

as variáveis em questão são todas implementadas dentro da própria classe.

alguem tem alguma ideia? :slight_smile:

Edit: Falei besteira… vou pesquisar.

Você não pode formatar uma string como um número. O que você deve fazer é passar o número:

    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(2);
    public String getTotal(){
        double val1 = Double.valueOf(str1).doubleValue();
        double val2 = Double.valueOf(str2).doubleValue();
        double total = val1 + val2;
        return nf.format(total);
    }

A propósito, tanto DecimalFormat quanto SimpleDateFormat têm problemas ao serem usados em ambientes multi-threaded (como em EJBs, Servlets e JSPs. )
Se você criar uma instância para cada thread (usando a classe ThreadLocal) ou então local a um método, não há problemas; mas se você usar uma instância da classe ou então no seu objeto, se ele for compartilhado por várias threads, você pode ter alguns problemas de formatação incorreta.

pois é! funcionou mas me gerou outro problema! kkkkkk

o nf.format() modificou o formato do numero de 87.1512311 para 87,15! dai gerou um conflito na outra classe por conta da substituição do ponto pela virgula!
e agora???

Sua máquina está com Windows em português, não?

Se precisar formatar no formato americano, você tem de usar:

NumberFormat nf = new DecimalFormat ("0.00", new DecimalFormatSymbols (Locale.US)));

em vez de

NumberFormat nf = NumberFormat.getInstance();  
nf.setMaximumFractionDigits(2);  

prontooooo véio!

muito obrigado pela atenção! deu tudo certo! =))

^^