wake-up-neo.net

Doppelter Wert mit spezifischer Genauigkeit in Java

Ich programmiere ein einfaches Java-Programm. Ich muss einen String von der Eingabe abrufen und ihn in zwei Teile teilen: 1-double 2-string . Dann muss ich eine einfache Berechnung für das double durchführen und das Ergebnis mit einer bestimmten Genauigkeit (4) an die Ausgabe senden. Es funktioniert gut, aber es gibt ein Problem, wenn die Eingabe 0 ist, dann funktioniert es nicht richtig.

Zum Beispiel wird für diese Eingabe Folgendes ausgegeben:

1 kg
Ausgabe: 2.2046

3,1 kg
Ausgabe: 6.8343

Wenn die Eingabe jedoch 0 ist, sollte die Ausgabe 0,0000 sein, aber sie zeigt 0,0 . Was muss ich tun, um die Anzeige von 0,0000 zu erzwingen?

Ich lese einen ähnlichen Beitrag über die doppelte Genauigkeit, sie schlagen etwas wie BigDecimal class vor, aber ich kann sie in diesem Fall nicht verwenden. Mein Code dafür 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");
9

Mit DecimalFormat können Sie festlegen, wie viele Ziffern Sie anzeigen möchten. Eine '0' erzwingt die Ausgabe von Ziffern, selbst 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 die Dokumentation

Hinweis: Bei häufiger Verwendung sollten Sie den Formatierer aus Leistungsgründen nur einmal instanziieren und die Referenz speichern: final DecimalFormat df = new DecimalFormat("#0.0000");. Dann benutze df.format(value).

19
Blacklight

fügen Sie diese Instanz von DecimalFormat am Anfang Ihrer Methode hinzu:

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 "#"

rufen Sie dann die Instanz "vier" auf und übergeben Sie Ihren Doppelwert, wenn Sie Folgendes anzeigen:

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

Ich empfehle Ihnen, die BigDecimal-Klasse für die Berechnung mit Gleitkommawerten zu verwenden. Sie können die Genauigkeit der Fließkomma-Arithmetik steuern. Aber zurück zum Thema :)

Sie könnten 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");
}

erhalten Sie die folgende Ausgabe:

0,0000 kg

2,2046 kg

6,8343 kg
1

System.out.format("%.4f kg\n", 0.0d) druckt '0.0000 kg'

0
Marc Dzaebel

Verwenden Sie DecimalFormat , um Ihren doppelten Wert in eine String-Ausgabe mit fester Genauigkeit zu formatieren. 

DecimalFormat ist eine konkrete Unterklasse von NumberFormat, die .__ formatiert. Dezimal Zahlen. Es verfügt über eine Vielzahl von Funktionen, mit denen es erstellt werden soll Zahlen können in jedem Gebietsschema analysiert und formatiert werden, einschließlich der Unterstützung für westliche, arabische und indische Ziffern. Es unterstützt auch verschiedene Zahlenarten, einschließlich Ganzzahlen (123), Festkommazahlen (123.4), wissenschaftliche Notation (1.23E4), Prozentsätze (12%) und Währung Beträge (123 $). Alle diese können lokalisiert werden.

Beispiel -

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

String.format erstellt lediglich eine String-Darstellung des Gleitkommawerts. Wenn für eine Mindestgenauigkeit kein Flag bereitgestellt wird, füllen Sie das Ende der Zeichenfolge einfach mit Nullen auf.

0
Aaron