2016-06-24 17 views
0

Ich möchte Java BigDecimal Ausgabe

mein Code-Schnipsel Hier String "0,955000" auf "0.96" mit Java DecimalFormat

konvertieren:

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

Hier habe ich den Ausgangswert als "0.95" erhalten. Ich erwartete eine Ausgabe von "0,96". Weiß jemand, was in meinem Code falsch ist? Und gibt es einen Weg, ich kann "0.96" im Dezimalformat bekommen.

+8

Ihr Titel spricht über ein Problem mit 'BigDecimal', aber Ihr Code verwendet es nicht. Womit brauchst du Hilfe? – Tunaki

+1

Um auf die Antwort von @Tunaki zu kommen, wenn Sie BigDecimal verwenden, können Sie die '.setScale (..)' Methode verwenden und erreichen, was Sie wollen. – lucasvw

+1

Ähem, doppelte Präzision. –

Antwort

2

Dies ist der Code, den ich versucht:

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); 
    } 
} 

Der Ausgang I JDK bekam 7 ist 0,96, aber mit jdk 8 Ich habe 0,95. Hier

Deshalb: 0,955 als doppelt so hoch ist: ,9549999833106995 in IEEE Binärformat

Die runde Hälfte bis werden wird: 0,95, das ist die richtige Antwort.

+1

Ich bekomme 0,95, wenn ich Ihren Code mit 1.8 ausführen .0_40 – azurefrog

+0

Dies ist ähnlich der folgenden Frage: http://stackoverflow.com/questions/30778927/roundingmode-half-down-issue-in-java8 – Wael

+0

Vielen Dank für Ihre Antwort. Habe das Problem jetzt. –

0

Das Problem damit gefunden. Früher habe ich mit Java 7 versucht und bekam 0.96. Jetzt, nachdem ich zu Java 8 gewechselt habe, habe ich es als 0,95 bekommen. Ich denke, es ist ein Problem mit der Java-Version. Java 7 und 8 verhalten sich für das Dezimalformat unterschiedlich.

+0

Der korrekte Ausgang ist 0,95 und nicht 0,96, weil das Doppel im IEEE-Binärformat gespeichert ist. Siehe mein Update oben – Wael

Verwandte Themen