2016-06-24 2 views
0

Je veux convertir la chaîne « 0,955000 » à « 0,96 » en utilisant Java DecimalFormatJava BigDecimal Problème

Voici mon extrait de code:

String inputVal = "0.955000"; 
DecimalFormat decFmt = new DecimalFormat("0.00") 
decFmt.setRoundingMode(RoundingMode.HALF_UP); 
String outputVal = decFmt.format(Double.valueof(inputVal)); 

Ici je reçois la valeur de sortie comme « 0,95 ». Je m'attendais à ce que la sortie soit "0,96". Est-ce que quelqu'un sait ce qui ne va pas dans mon code? Et est-il un moyen, je peux obtenir "0,96" en utilisant le format décimal.

+8

Votre titre parle d'un problème avec 'BigDecimal', mais votre code ne l'utilise pas. Avec quoi as-tu besoin d'aide? – Tunaki

+1

Pour coller à la réponse de @Tunaki, si vous utilisiez BigDecimal, vous pouvez utiliser la méthode '.setScale (..)' et accomplir ce que vous voulez. – lucasvw

+1

Ahem, double précision. –

Répondre

2

Voici le code que j'ai essayé:

import java.math.RoundingMode; 
import java.text.DecimalFormat; 


public class Test 
{ 
    public static void main(String[] args) 
    { 
    String inputVal  = "0.955000"; 
    DecimalFormat decFmt = new DecimalFormat("0.00"); 
    decFmt.setRoundingMode(RoundingMode.HALF_UP); 
    String outputVal = decFmt.format(Double.valueOf(inputVal)); 
    System.out.println(outputVal); 
    } 
} 

La sortie que je suis en utilisant 7 est jdk 0,96 mais avec 8 jdk J'obtenu 0,95.

Voici pourquoi: 0,955 en double est: ,9549999833106995 IEEE format binaire

La moitié Rafle deviendra: 0,95 qui est la bonne réponse.

+1

Je reçois 0,95 lorsque j'exécute le code en utilisant 1.8 .0_40 – azurefrog

+0

Ceci est similaire à la question suivante: http://stackoverflow.com/questions/30778927/roundingmode-half-down-issue-in-java8 – Wael

+0

Merci pour votre réponse. Vous avez le problème maintenant. –

0

Trouvé le problème avec ceci. Auparavant, j'essayais avec Java 7 et obtenait 0,96. Maintenant, après avoir changé en Java 8, je l'ai eu comme 0,95. Je pense que c'est un problème de version Java. Java 7 et 8 se comportent différemment pour le format décimal.

+0

La sortie correcte est 0,95 et non 0,96 car le double est stocké au format binaire IEEE. Voir ma mise à jour ci-dessus – Wael