Wie drucke ich ein Float mit 2 Dezimalstellen in Java?

Antworten:

248

Sie können die printfMethode wie folgt verwenden:

System.out.printf("%.2f", val);

Kurz gesagt, die %.2fSyntax weist Java an, Ihre Variable ( val) mit 2 Dezimalstellen ( .2) in Dezimaldarstellung einer Gleitkommazahl ( f) vom Anfang des Formatbezeichners ( %) zurückzugeben.

Es gibt noch andere Konvertierungszeichen, die Sie verwenden können f:

  • d: Dezimalzahl
  • o: oktale Ganzzahl
  • e: Gleitkomma in wissenschaftlicher Notation
Anthony Forloney
quelle
13
Bitte seien Sie vorsichtig, da String.format von Ihrer aktuellen lokalen Konfiguration abhängt. Möglicherweise erhalten Sie keinen Punkt als Trennzeichen. Verwenden Sie String.format(java.util.Locale.US,"%.2f", val);
lieber
1
@gomino Warum nicht Locale.FRANCE?
Erickson
3
@gomino Genau. Warum sollten Sie für französische Benutzer Punkte in Zahlen setzen?
Erickson
1
Ich habe diesen Kommentar hinzugefügt, um Menschen zu warnen, die erwarten, immer einen Punkt als Trennzeichen zu haben.
Gomino
6
@gomino Das macht Sinn, aber ich denke, Hardcodierung zu "bevorzugen" Locale.USgeht zu weit. Wenn Sie ein "neutrales" Gebietsschema für das Falzen von Groß- und Kleinschreibung, das Rendern von Zahlen usw. fest codieren müssen, geben Sie dies an Locale.ROOT. Dies ist für Text geeignet, der von einem anderen Programm verwendet wird und nicht für menschliche Benutzer gerendert wird. Beachten Sie für Text, der einem Benutzer angezeigt wird, dessen Gebietsschema, unabhängig davon, ob er es explizit angegeben hat oder es die Standardeinstellung ist.
Erickson
178

Sie können verwenden DecimalFormat. Eine Möglichkeit, es zu verwenden:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));

Eine andere Möglichkeit besteht darin, es im #.##Format zu erstellen.

Ich finde alle Formatierungsoptionen weniger lesbar als das Aufrufen der Formatierungsmethoden, aber das ist eine Frage der Präferenz.

Bozho
quelle
11
Was ist mit der System.out.printf("%.2f", value)Syntax passiert ? Ist es noch da?
Anthony Forloney
6
es ist. Es ist immer noch eine Option - Sie können Ihre Antwort wiederherstellen;)
Bozho
Sieht so aus, als wäre es meine Option, da ich noch nicht weiß, wie ich DecimalFormat verwenden soll :) Danke!
via_point
Ich habe seit einiger Zeit keine umfangreiche Java-Arbeit mehr geleistet, und als ich immer wieder DecimalFormatAntworten sah, hatte ich sofort gedacht, dass ich falsch liege, aber danke, dass Sie das klargestellt haben.
Anthony Forloney
9
Hinzufügen df.setMinimumFractionDigits(2);, um zwei Ziffern zu erzwingen
Terel
87

Ich würde empfehlen, String.format () zu verwenden, wenn Sie den Wert als Stringin Ihrem Code benötigen .

Sie können beispielsweise String.format()Folgendes verwenden:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);
John P.
quelle
14
"% .02f" und "% .2f" sind dasselbe
Borzh
40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Kevin Sylvestre
quelle
5
Hallo Kevin, wenn ich 10.0000 eingebe, bekomme ich nur 10. Wenn ich 10.00 anzeigen möchte, wie kann ich dann tun?
Mdhar9e
2
@ Mdhar9e verwendenDecimalFormat df = new DecimalFormat("0.00");
K.Sopheak
16
float f = 102.236569f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
Phan Van Linh
quelle
4
Abhängig vom Gebietsschema erhalten Sie möglicherweise ein Komma. Wenn Sie ein Punkttrennzeichen möchten, verwenden Sie Folgendes: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
DPM
10
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

Die Ausgabe ist 22,35. Wenn Sie 3 Dezimalstellen benötigen, ändern Sie diese in "% .3f".

Aldin Philo
quelle
9

Ein einfacher Trick besteht darin, eine kürzere Version Ihrer Variablen zu generieren, indem Sie sie mit z. B. multiplizieren 100, runden und erneut dividieren 100.0. Auf diese Weise generieren Sie eine Variable mit 2 Dezimalstellen :

double new_variable = Math.round(old_variable*100) / 100.0;

Dieser "billige Trick" war immer gut genug für mich und funktioniert in jeder Sprache (ich bin keine Java-Person, lerne ihn nur).

Birk
quelle
1
Dies ist falsch, viele Zahlen wiederholen Zahlen in der Gleitkommadarstellung, nachdem Sie durch 100 geteilt haben. Daher nicht zwei Dezimalstellen.
Matt
8

Sie können diese Quickcodes unten verwenden, die sich am Ende selbst geändert haben. Fügen Sie hinzu, wie viele Nullen sich nach dem Punkt beziehen

float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");  
y1 = Float.valueOf(df.format(y1));

Die Variable y1 war zuvor gleich 0,123456789 . Nach dem Code wird nur noch 0.12 angezeigt .

Bucht
quelle
2
Es wird keine 0 vor dem Punkt angezeigt. Es sollte DecimalFormat sein df = new DecimalFormat ("0.00");
Ridhuvarshan
Sicher! DecimalFormat ("0.00") funktioniert auch! Toller Ort.
Bay
6

Schauen Sie sich DecimalFormat an

Hier ist ein Beispiel aus dem Tutorial:

  DecimalFormat myFormatter = new DecimalFormat(pattern);
  String output = myFormatter.format(value);
  System.out.println(value + "  " + pattern + "  " + output);

Wenn Sie ein Muster wie "###. ##" wählen, erhalten Sie zwei Dezimalstellen, und ich denke, dass die Werte aufgerundet sind. Sie sollten sich den Link ansehen, um genau das gewünschte Format zu erhalten (z. B. ob Sie nachgestellte Nullen möchten).

Uri
quelle
5

Im Folgenden finden Sie Code, wie Sie eine Ausgabe von Float-Daten mit 2 Dezimalstellen in Java anzeigen können:

float ratingValue = 52.98929821f; 
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98
Keshav Gera
quelle
3

OK - str zu schweben.

package test;

import java.text.DecimalFormat;

public class TestPtz {
  public static void main(String[] args) {
    String preset0 = "0.09,0.20,0.09,0.07";
    String[] thisto = preset0.split(",");    
    float a = (Float.valueOf(thisto[0])).floatValue();
    System.out.println("[Original]: " + a);   
    a = (float) (a + 0.01);

    // Part 1 - for display / debug
    System.out.printf("[Local]: %.2f \n", a);
    // Part 2 - when value requires to be send as it is
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(2);
    System.out.println("[Remote]: " + df.format(a));

  }
}

Ausgabe:

run:
[Original]: 0.09
[Local]: 0.10 
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds)

quelle
1

kleines einfaches Programm zur Demonstration:

import java.io.*;
import java.util.Scanner;

public class twovalues {

    public static void main(String args[]) {

        float a,b;
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter Values For Calculation");

        a=sc.nextFloat();
        b=sc.nextFloat();

        float c=a/b;
        System.out.printf("%.2f",c);
    }
}
Pavan vadrevu
quelle
1

Tun String str = System.out.printf("%.2f", val).replace(",", ".");Sie dies einfach, wenn Sie sicherstellen möchten, dass unabhängig vom Gebietsschema des Benutzers immer ein "/" angezeigt wird. als Dezimaltrennzeichen. Dies ist ein Muss, wenn Sie Ihr Programm nicht zum Absturz bringen möchten, wenn Sie später eine Konvertierung wie durchführenfloat f = Float.parseFloat(str);

Paul Efford
quelle
1

Ein Problem, das mich eine Stunde oder länger beschäftigt hat DecimalFormat- Es behandelt Double- und Float-Eingaben unterschiedlich. Auch eine Änderung des RoundingMode hat nicht geholfen. Ich bin kein Experte, dachte aber, es könnte jemandem wie mir helfen. Endete Math.roundstattdessen mit. Siehe unten:

    DecimalFormat df = new DecimalFormat("#.##");
    double d = 0.7750;
    System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d)));
    float f = 0.7750f;
    System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f)));
    // change the RoundingMode
    df.setRoundingMode(RoundingMode.HALF_UP);
    System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d)));
    System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));

Ausgabe:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77
user2984447
quelle
0

Versuche dies:-

private static String getDecimalFormat(double value) {

    String getValue = String.valueOf(value).split("[.]")[1];

      if (getValue.length() == 1) {
          return String.valueOf(value).split("[.]")[0] +
                "."+ getValue.substring(0, 1) + 
                String.format("%0"+1+"d", 0);
       } else {
          return String.valueOf(value).split("[.]")[0]
            +"." + getValue.substring(0, 2);
      }


 }
Nathani Software
quelle
Für weitere Details: - makecodesimpleandeasy.blogspot.com/2019/08/…
Nathani Software