Casas decimais

Olá,
quando converto de double para String, um valor por exemplo 40.00, a String corta o ultimo zero deixando assim 40.0, so q como e valor em dinheiro tenho imprimir com os 2 zeros
grato.

double d = 1234.56;
String s = String.format ("%.2f", d);
System.out.println (s); //  imprime "1234,56"
DecimalFormat df = new DecimalFormat ("#,##0.00");
s = df.format (d); // imprime "1.234,56"

Pra que serve o # de ???

DecimalFormat df = new DecimalFormat ("#,##0.00");  

-> indica que o lugar pode ser ocupado por um dígito de 0 a 9, ou então estar vazio.

0 -> indica que o lugar pode ser ocupado por um dígito de 0 a 9

[quote=thingol] double d = 1234.56; String s = String.format ("%.2f", d); System.out.println (s); // imprime "1234,56" DecimalFormat df = new DecimalFormat ("#,##0.00"); s = df.format (d); // imprime "1.234,56" [/quote]
funcinou perfeitamente
muito grato.

Entendi!
E a diferença de casas entre o “.” e a “,” é a periodicidade que o ponto a esquerda se repete né!
DecimalFormat df = new DecimalFormat (",##0.00");
É possível utilizar um separador “;” ou “=” por exemplo?
Outra coisa, existe uma maneira de converter o formato do numero conforme o país.
Como converter o formato padrão para o Brasil, tem como usar a classe LocaleNames_pt_BR?

É. Consulte a documentação de DecimalFormatSymbols.

Por exemplo, digamos que você quisesse formatar 1.234.567,00 como:

1.234.567$00

Ou seja, usar um separador de milhares . e um separador de ponto (vírgula) decimal $ (quem já fez contas em escudos, no tempo em que existia essa moeda em Portuga, vai reconhecer essa notação. Hoje em dia usa-se o euro.)

import java.text.*;

class TesteEscudo {
    public static void main (String[] args) {
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setDecimalSeparator ('$');
        dfs.setGroupingSeparator ('.');

        DecimalFormat df = new DecimalFormat ("#,##0.00", dfs);
        double d = 1234567.00;
        System.out.println (df.format (d));
    }
}
// Imprime:
// 1.234.567$00

Valeu pelas discas Vini,
Pra finalizar!
Tem algum jeito melhor de fazer isso?

Locale[] loc = Locale.getAvailableLocales();
		NumberFormat f = NumberFormat.getInstance(loc[61]);
		 if (f instanceof DecimalFormat) {
		     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
		 	}
		 System.out.println(f.format(2103.43));//imprime 2.103,43

Abraços, Alan

         NumberFormat f = NumberFormat.getInstance(loc[61]);  

Confesso que esse é o código mais esdrúxulo que já vi. Qual é o locale [61]?

É o Brasil, na verdade eu gostaria de saber se existe alguma maneira de chamar pela constante que representa o brasil.
Esse código está na API, mas eu peguei só algumas partes.

e caso seu eu quissese que não jogasse nenhum zero como eu faria?

Tenta

double d = 1234.56;   
String s = String.format ("%.0f", d);

ou

double d = 1234.56;   
String s = String.valueof((long)(d));

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Float.html

Era isso que estava querendo dizer

  	NumberFormat nfBrazil = NumberFormat.getInstance(new Locale("pt","BR"));