2013-09-22 21 views
8

Ich programmiere ein einfaches Java-Programm. Ich muss eine Zeichenfolge von der Eingabe erhalten und es in zwei Teile teilen: 1-double 2-string. Dann muss ich eine einfache Berechnung für den Doppelpunkt durchführen und das Ergebnis mit bestimmter Genauigkeit an den Ausgang senden (4). Es funktioniert gut, aber es gibt ein Problem, wenn die Eingabe 0 ist, dann funktioniert es nicht richtig.Doppelter Wert mit spezifischer Genauigkeit in Java

Zum Beispiel für diese Eingabe, wird ausgegeben:

1 kg
Ausgang: 2,2046

3,1 kg
Ausgang: 6,8343

Aber wenn der Eingang 0 ist, sollte der Ausgang ist 0.0000, aber es zeigt 0.0. Was soll ich tun, um die Anzeige von 0,0000 zu erzwingen?

ich ähnliche Post über doppelte Genauigkeit zu lesen, schlagen sie so etwas wie BigDecimal Klasse, aber ich kann sie in diesem Fall nicht verwenden, mein Code, dies zu tun ist:

line=input.nextLine(); 
array=line.split(" "); 
value=Double.parseDouble(array[0]); 
type=array[1]; 
value =value*2.2046; 
String s = String.format("%.4f", value); 
value = Double.parseDouble(s); 
System.out.print(value+" kg\n"); 
+0

Try "% 0.4f". Das bedeutet, formatieren Sie einen Gleitkommawert und füllen Sie ihn mit Nullen, bis Sie 4 Ziffern haben. – user268396

+0

Ich habe "% .4f" verwendet, aber es zeigt diesen Fehler an: Ausnahme im Thread "main" java.util.MissingFormatWidthException: 0.4f – MehrdadSComputer

+1

Siehe auch http://StackOverflow.com/questions/10959424/show-only-two- digit-nach-decimal, aber das ist kein Duplikat davon wegen der für 0 gewollten Formatierung. – Raedwald

Antwort

18

DecimalFormat ermöglicht es Ihnen, zu definieren, wie viele Stellen Sie anzeigen möchten. Eine '0' wird eine Ausgabe von Ziffern erzwingen, auch wenn der Wert Null ist, während ein '#' Nullen weglässt.

System.out.print(new DecimalFormat("#0.0000").format(value)+" kg\n"); sollte zum Trick.

Siehe documentation

Hinweis: Wenn aus Leistungsgründen häufig verwendete man nur einmal die Formatierungs instanziiert sollte und speichern Sie die Referenz: final DecimalFormat df = new DecimalFormat("#0.0000");. Dann verwenden Sie df.format(value).

+0

können Sie es bitte in Code verwenden, ich weiß nicht, wie Sie es verwenden! – MehrdadSComputer

+0

habe ich bereits, ersetzen Sie Ihre letzte Zeile, die Ihren Wert ausgibt. – Blacklight

+0

es funktionierte für mich, aber bitte ändern Sie es in ("# 0.0000"), Ihre Antwort out ist 0.0000, aber wenn wir ("# 0.0000") verwenden, zeigt es 0.0000, danke für Ihre Hilfe. – MehrdadSComputer

0

Verwenden DecimalFormat zu formatieren Doppelter Wert für die Ausgabe der Zeichenfolge mit fester Genauigkeit.

DecimalFormat is a concrete subclass of NumberFormat that formats decimal numbers. It has a variety of features designed to make it possible to parse and format numbers in any locale, including support for Western, Arabic, and Indic digits. It also supports different kinds of numbers, including integers (123), fixed-point numbers (123.4), scientific notation (1.23E4), percentages (12%), and currency amounts ($123). All of these can be localized.

Beispiel -

System.out.print(new DecimalFormat("##.##").format(value)+" kg\n"); 
+0

Ihre Antwort und die Antwort von blacklight sind was ich will, danke für Ihre Hilfe. – MehrdadSComputer

+0

@ downvoter freundlicherweise kommentieren für negetive? –

0

String.format erstellt nur eine String-Darstellung des Gleitkommawerts. Wenn es keine Flagge für eine minimale Genauigkeit bereitstellt, dann füllen Sie das Ende der Zeichenfolge mit Nullen auf.

+0

BlackLights Antwort sieht besser aus. – Aaron

+0

Ich habe Ihren Vorschlag verwendet, aber es funktioniert nicht, wie Sie gesagt haben BlackLight's Antwort ist, was ich will, Danke, – MehrdadSComputer

+0

Es ist unmöglich für meine Antwort "nicht funktionieren": D Es ist nur "0" s zu einer Zeichenfolge hinzufügen. Es ist jedoch eine suboptimale Lösung. Kein Sinn, Räder neu zu erfinden! – Aaron

4

fügen diese Instanz von DecimalFormat an die Spitze Ihrer Methode:

DecimalFormat four = new DecimalFormat("#0.0000"); // will round and display the number to four decimal places. No more, no less. 

// the four zeros after the decimal point above specify how many decimal places to be accurate to. 
// the zero to the left of the decimal place above makes it so that numbers that start with "0." will display "0.____" vs just ".____" If you don't want the "0.", replace that 0 to the left of the decimal point with "#" 

dann rufen Sie die Instanz „vier“ und Ihre doppelten Wert übergeben, wenn die Anzeige:

double value = 0; 
System.out.print(four.format(value) + " kg/n"); // displays 0.0000 
1

Ich schlage vor, Sie Verwenden Sie die Klasse BigDecimal zum Berechnen mit Gleitkommawerten. Sie können die Genauigkeit der Fließkomma-Arithmetik steuern.Aber zurück zum Thema :)

könnten Sie Folgendes verwenden:

static void test(String stringVal) { 
    final BigDecimal value = new BigDecimal(stringVal).multiply(new BigDecimal(2.2046)); 
    DecimalFormat df = new DecimalFormat(); 
    df.setMaximumFractionDigits(4); 
    df.setMinimumFractionDigits(4); 
    System.out.println(df.format(value) + " kg\n"); 
} 

public static void main(String[] args) { 
    test("0"); 
    test("1"); 
    test("3.1"); 
} 

geben Sie die folgende Ausgabe:

0,0000 kg 

2,2046 kg 

6,8343 kg 
+0

Danke für Ihre Informationen, ich wusste nicht, wie BigDecimal verwenden, um die Genauigkeit einzustellen. – MehrdadSComputer

Verwandte Themen