Come stampare un float con 2 cifre decimali in Java?


Risposte:


250

È possibile utilizzare il printfmetodo, in questo modo:

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

In breve, la %.2fsintassi dice a Java di restituire la variabile ( val) con 2 cifre decimali ( .2) nella rappresentazione decimale di un numero in virgola mobile ( f) dall'inizio dell'identificatore di formato ( %).

Ci sono altri caratteri di conversione che puoi usare oltre a f:

  • d: intero decimale
  • o: numero intero ottale
  • e: virgola mobile in notazione scientifica

13
Fai attenzione perché String.format dipende dalla tua configurazione locale corrente, potresti non ottenere un punto come separatore. Preferisco usareString.format(java.util.Locale.US,"%.2f", val);
Gomino

1
@gomino Perché no Locale.FRANCE?
Erickson,

3
@gomino Esatto. Allora perché dovresti mettere i punti in numeri per gli utenti francesi?
Erickson,

1
Ho aggiunto questo commento come promemoria per avvertire le persone che si aspettano di avere sempre un punto come separatore.
Gomino,

6
@gomino Ha senso, ma penso che "preferire" l'hard-coding Locale.USvada troppo lontano. Se avete bisogno di codificare un locale "neutrale" per case-folding, il rendering numero, ecc, specificare Locale.ROOT. Ciò sarebbe appropriato per il testo che verrà consumato da un altro programma, anziché renderizzato per gli utenti umani. Per il testo presentato a un utente, onora la sua locale, indipendentemente dal fatto che sia stata specificata esplicitamente o che sia l'impostazione predefinita.
Erickson,

179

È possibile utilizzare DecimalFormat. Un modo per usarlo:

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

Un altro è costruirlo usando il #.##formato.

Trovo tutte le opzioni di formattazione meno leggibili rispetto alla chiamata dei metodi di formattazione, ma è una questione di preferenza.


11
Che cosa è successo con la System.out.printf("%.2f", value)sintassi? È ancora in giro?
Anthony Forloney,

6
è. è ancora un'opzione - puoi annullare l'eliminazione della tua risposta;)
Bozho,

Sembra che sia la mia opzione, dato che non so ancora come usare DecimalFormat :) Grazie!
via_point,

Non ho lavorato molto a Java da un po 'di tempo e quando continuavo a vedere le DecimalFormatrisposte avevo subito pensato di sbagliarmi, ma grazie per avermi chiarito.
Anthony Forloney,

9
aggiungi df.setMinimumFractionDigits(2);per forzare due cifre
Terel

88

Suggerirei di utilizzare String.format () se hai bisogno del valore come Stringnel tuo codice.

Ad esempio, è possibile utilizzare String.format()nel modo seguente:

float myFloat = 2.001f;

String formattedString = String.format("%.02f", myFloat);

14
"% .02f" e "% .2f" sono la stessa cosa
Borzh,

40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));

5
Ciao Kevin, se inserisci 10.0000, ne ottengo solo 10. Se voglio visualizzare 10.00, come posso fare?
Mdhar9e,

2
@ Uso Mdhar9eDecimalFormat 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

4
A seconda delle impostazioni internazionali, potresti ottenere una virgola. Se vuoi un separatore di punti, usa questo: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
DPM,

10
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));

L'output è 22.35. Se sono necessari 3 punti decimali, modificarlo in "% .3f".



9

Un semplice trucco è generare una versione più breve della variabile moltiplicandola per es 100. Arrotondandola e dividendola di 100.0nuovo. In questo modo si genera una variabile, con 2 cifre decimali :

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

Questo "trucco economico" è sempre stato abbastanza buono per me e funziona in qualsiasi lingua (non sono una persona Java, sto solo imparando).


1
Questo è sbagliato, molti numeri ripeteranno i numeri nella rappresentazione float dopo aver diviso per 100. Quindi non due cifre decimali.
opaco

8

È possibile utilizzare questi codici rapidi di seguito che si sono modificati alla fine. Aggiungi quanti zeri si riferisce dopo il punto

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

La variabile y1 era uguale a 0.123456789 prima. Dopo il codice si trasforma solo in 0.12 .


2
Non visualizza 0 prima del punto. Dovrebbe essere DecimalFormat df = new DecimalFormat ("0.00");
Ridhuvarshan,

Di sicuro! Anche DecimalFormat ("0.00") funzionerà! Ottimo posto
Baia il

6

Guarda DecimalFormat

Ecco un esempio dal tutorial:

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

Se scegli un modello come "###. ##", otterrai due cifre decimali e penso che i valori siano arrotondati per eccesso. Dovrai guardare il link per ottenere il formato esatto che desideri (ad esempio, se vuoi zeri finali)


5

Di seguito è riportato il codice su come visualizzare un output di dati float con 2 cifre decimali in Java:

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

3

OK - str per galleggiare.

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

  }
}

Produzione:

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

1

piccolo programma semplice per dimostrazione:

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

1

Fai solo String str = System.out.printf("%.2f", val).replace(",", ".");se vuoi assicurarti che indipendentemente dalle impostazioni internazionali dell'utente, otterrai / visualizzerai sempre un "." come separatore decimale. Questo è un must se non vuoi far andare in crash il tuo programma se successivamente esegui una sorta di conversione comefloat f = Float.parseFloat(str);


1

Un problema che mi ha causato per un'ora o più, DecimalFormatattivo: gestisce gli input double e float in modo diverso. Anche il cambio di RoundingMode non ha aiutato. Non sono un esperto, ma ho pensato che potesse aiutare qualcuno come me. Ho finito per usare Math.roundinvece. Vedi sotto:

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

Produzione:

Double 0.7750 -> 0.78
Float 0.7750f -> 0.77

Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77

0

Prova questo:-

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


 }

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.