divisão errada

public void calculaDescontos(double salBruto){
	//declaração das variáveis
	double fgts = 0.0;
	double inss = 0.0;
	
	//calculos dos descontos
	[b]fgts = salBruto*(7.0/100);[/b]
	inss = salBruto*(3.0/100);
	
	//mostra descontos
	JOptionPane.showMessageDialog(null,"FGTS: " +fgts);
	JOptionPane.showMessageDialog(null,"INSS: " +inss);
	//chamada de método
	calculaSalarioLiquido(salBruto,fgts,inss);
			
}//fim metodo

Galera esta instrução em negrito quando é 7.0, o resultado desta operação sai 7.000000001, enquanto que se colocar outro número como por exemplo 3.0, o resultado sai correto.

outra dúvida o java permite efetuar a seguinte divisão:
double x

x = 3/4;

System.out.printf("%.2f",x);

Imprime: 0.00 por que ?

Você está lidando com ponto flutuante, talvez seja interessante arredondar o resultado dessa operação.

fgts = Math.round(salBruto*(7.0/100));

Com relação a segunda dúvida, o resultado é 0.00 porque você dividiu dois inteiros. Como tanto o divisor, como o dividendo eram inteiros, o resultado também é inteiro, por isso que 3/4 é igual a 0.00.

Para obter o resultado como double, faça algo do tipo:

3/4.0 ou 3d/4...

Beleza? :thumbup:

Esse tópico explica o porquê dos problemas de divisão com float:
http://www.guj.com.br/posts/list/68086.java#357907

Mais um dos problemas herdados do C.
Em Pascal (Delphi), a divisão com “/” divide dois números quaisquer e retorna um “REAL” (double em C e Java); em VB a divisão retorna um Double. Se quiser a divisão inteira (ou seja, dividir dois inteiros e retornar um inteiro), você deve usar “div” em Pascal, e “” em VB.
Já em C, C++ e Java, a divisão “/” normal e a divisão inteira “/” usam o mesmo operador. Isso dá muita confusão no seu caso.

Uma forma é fazer igual aos programadores Fortran, que sempre explicitam que uma determinada constante é de ponto flutuante:

3.0 / 4.0 == 0.75 (assim funciona OK)