Duvida sobre Format

Eu vi essa pergunta no Javaranch, mais eu não conseguir assimilar bem a resposta, tentei procura no forum mais o sistema de busca esta realmente estranho, além disso eu emprestei meu livro da kathy ~~, se alguém achar um link com essa explicação mais detalhada é so postar que eu fecho a pergunta, obrigado.

[code] public class Slice {

 public static void main(String[] args) {  
     String s = "987.123456";  
     double d = 987.123456d;  
       
     NumberFormat nf = NumberFormat.getInstance();  
     nf.setMaximumFractionDigits(5);  
     System.out.println(nf.format(d)+ " ");  
     try{  
         System.out.println(nf.parse(s));  
     }  
     catch (Exception ex){  
         System.out.println("got exc");  
     }  

 }  

} [/code]

Resposta certa deu:
987.12346
987.123456

Meu compilador:
987,12346
987123456

Minha pergunta, porque esta linha System.out.println(nf.format(d)+ " ");
imprimi 987,12346 quando eu esperava alguma coisa como isso: 987,12345 ?

Olá Taaqui,

eu tbm vi essa questão no Javaranch.
http://www.coderanch.com/t/438427/Programmer-Certification-SCJP/certification/Confused-with-answers-from-K

Fiz alguns testes aqui e notei que existe um arrendodamento na úlima casa .

Se você substituir

O compilador irá imprimir:

987,12345

Definindo o comportamento do método setMaximumFractionDigits:

Ele pega o último numero da parte fracionária se for maior que 4 arredonda para um numero maior,
no caso nós temos as últimas casas decimais o valor de 56 ele arredondará esse valor para 6 .

obs: claro isso pq você tinha 6 casas na parte fracionária e definiou que o máximo seria 5.

espero ter ajudado.

O metódo parse está retornando um inteiro?
Quando ele vai ter este comportamento.

Ele tem esse comportamento pq a sua máquina está configurada para usar a ‘,’ como divisor de números decimais. Tanto é q se vc compilar o código com a String s = “987,123456”; vai aparecer como resultado “987.123456” com ‘.’.

O compilador lê números decimais com vírgula e os imprime com pontos.
O método parse recebe uma String e retorna um Number! Não o contrário…