Formatarea zecimală dublă în Java (Programare, Java, Formatare, Dublu, Zecimal)

Christoffer a intrebat.

Am unele probleme în formatarea zecimalei unui dublu. Dacă am o valoare dublă, de exemplu, 4.0, cum pot formata zecimalele astfel încât să fie 4.00 în loc de 4.00?

Comentarii

  • Încercați să utilizați String.format() sau java.text.Format. –  > Por Code-Apprentice.
  • posibil duplicat al Arată doar două cifre după zecimală –  > Por Raedwald.
  • Posibil duplicat al Cel mai bun mod de a formata o valoare dublă cu 2 zecimale –  > Por Keale.
14 răspunsuri
kosa

Una dintre modalități ar fi folosirea NumberFormat.

NumberFormat formatter = new DecimalFormat("#0.00");     
System.out.println(formatter.format(4.0));

Ieșire:

4.00

Comentarii

  • Da, dar nu vreau virgulă, ci semnul zecimal. –  > Por Christoffer.
  • Primesc o virgulă. Iată ce am făcut. „double variable; NumberFormat formatter = new DecimalFormat(„#0.00”); System.out.println(formatter.format(variable)); -.  > Por Christoffer.
  • Primești o virgulă din cauza limbajului implicit folosit de JVM-ul tău, care este probabil diferit de cele din Nambari. Aruncați o privire la javadocul NumberFormat : docs.oracle.com/javase/1.4.2/docs/api/java/java/text/… –  > Por Michael Zilbermann.
  • După cum a subliniat zim2001, localitatea dvs. ar putea fi diferită. Citiți linkul furnizat în răspunsul meu. La sfârșit veți găsi informații despre acest lucru. –  > Por kosa.
  • Opțional u ar putea dori să adăugați un alt separator pentru cifrele mai mari de 3 înainte de virgulă, apoi utilizați următoarele NumberFormat formatter = new DecimalFormat("#,000.00"); System.out.println(formatter.format(4.0)); –  > Por Jose Mhlanga.
Rohit Jain

Cu Java 8, puteți utiliza format metoda …: –

System.out.format("%.2f", 4.0); // OR

System.out.printf("%.2f", 4.0); 
  • f este utilizată pentru floating valoarea punctului …
  • 2 după zecimală denotă, numărul de zecimale după .

Pentru majoritatea versiunilor Java, puteți utiliza DecimalFormat: –

    DecimalFormat formatter = new DecimalFormat("#0.00");
    double d = 4.0;
    System.out.println(formatter.format(d));

Vincent Mimoun-Prat

Utilizați String.format:

String.format("%.2f", 4.52135);

Conform documentației:

Localitatea utilizată întotdeauna este cea returnată de Locale.getDefault().

Comentarii

  • String.format acceptă, de asemenea, un local ca prim parametru pentru a ține cont de formatarea semnelor zecimale. –  > Por Vincent Mimoun-Prat.
  • Pentru a evita semnele zecimale specifice localității (cum ar fi virgula), specificați locale US: String.format(Locale.US,”%.2f”, 4.52135); –  > Por Alexander233.
  • Eu aș spune „pentru a folosi punctul specific local din SUA ca semn zecimal, specificați localele din SUA” … această idee că obiceiurile din SUA sunt cele corecte și că orice altceva este un fel de chestie „populară” mă scoate din minți. –  > Por Simone Gianni.
  • @SimoneGianni Nu faceți presupuneri stupide, unii oameni ar putea avea nevoie ca zecimala să fie un punct. De exemplu, scriu o funcție care exportă un document CSV și nu pot avea o virgulă, deoarece caracterul virgulă este delimitatorul. –  > Por Kaiser Keister.
Ojonugwa Jude Ochalifu

Folosind String.format, puteți face acest lucru:

double price = 52000;
String.format("$%,.2f", price);

Observați virgula care face ca acest lucru să fie diferit de răspunsul lui @Vincent

Ieșire:

$52,000.00

O resursă bună pentru formatare este oficială java oficială pe această temă

Lewis Robbins

Ați putea folosi întotdeauna metoda statică printf from System.out – apoi ați implementa formatorul corespunzător; acest lucru economisește spațiu în heap, ceea ce alte exemple vă cereau să faceți.

Ex:

System.out.format("%.4f %n", 4.0); 

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

Economisește spațiu în heap, ceea ce este un bonus destul de mare, cu toate acestea, sunt de părere că acest exemplu este mult mai ușor de gestionat decât orice alt răspuns, mai ales că majoritatea programatorilor cunosc funcția printf din C (Java schimbă ușor funcția/metoda, totuși).

Comentarii

  • @Baz Îmi scapă un detaliu crucial aici, nu este menționat printStream. OP cere ajutor pentru formatare (care ar putea fi rezolvată mai ușor dacă se uită în documentele Java) către fluxul de ieșire standard. Explicați. –  > Por Lewis Robbins.
  • Greșeala mea. Mă uitam la versiunea greșită a javadoc-ului (1.4). BTW: out este PrintStream. –  > Por Baz.
  • @Baz Nu vă faceți griji. Da, am presupus că este clasa la care te refereai, în toate cărțile mele printf este menționată ca metodă statică din System.out (deoarece aceste metode sunt statice). –  > Por Lewis Robbins.
  • Ca să fiu mai exact, printf este o metodă statică din PrintStream. A se vedea aici 😉 Dar, cu toate acestea, +1. –  > Por Baz.
  • @Baz Din documentație, clasa printStream a moștenit System.out. S-ar putea să mă înșel – deși este destul de ciudat să moștenești o metodă statică (este chiar posibil)? Sunteți, mă aștept să aveți totuși dreptate. –  > Por Lewis Robbins.
Subhrajyoti Majumder
new DecimalFormat("#0.00").format(4.0d);

Michael Zilbermann
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));

achAmháin

O metodă alternativă este utilizarea setMinimumFractionDigits metoda din NumberFormat clasă.

Aici, practic, specificați câte numere doriți să apară după virgulă.

Astfel, o intrare de 4.0 ar produce 4.00, , presupunând că suma specificată este 2.

Dar, dacă valoarea dvs. Double conține mai mult decât suma specificată, se va lua suma minimă specificată, apoi se va adăuga încă o cifră rotunjită în sus/în jos.

De exemplu, 4.15465454 cu o sumă minimă de 2 va produce 4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

Încearcă-l online

Fazil

Puteți utiliza oricare dintre metodele de mai jos

  1. Dacă utilizați java.text.DecimalFormat

    DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance(); 
    decimalFormat.setMinimumFractionDigits(2); 
    System.out.println(decimalFormat.format(4.0));
    

    SAU

    DecimalFormat decimalFormat =  new DecimalFormat("#0.00"); 
    System.out.println(decimalFormat.format(4.0)); 
    
  2. Dacă doriți să îl convertiți în format simplu de șir de caractere

    System.out.println(String.format("%.2f", 4.0)); 
    

Toate codurile de mai sus vor imprima 4.00

Md. Sajedul Karim

Există mai multe moduri în care puteți face acest lucru. Acestea sunt prezentate mai jos:

Să presupunem că numărul original este cel de mai jos:

 double number = 2354548.235;

Folosind NumberFormat:

NumberFormat formatter = new DecimalFormat("#0.00");
    System.out.println(formatter.format(number));

Utilizarea String.format:

System.out.println(String.format("%,.2f", number));

Utilizarea DecimalFormat și a modelului:

NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
        DecimalFormat decimalFormatter = (DecimalFormat) nf;
        decimalFormatter.applyPattern("#,###,###.##");
        String fString = decimalFormatter.format(number);
        System.out.println(fString);

Utilizarea DecimalFormat și a modelului

DecimalFormat decimalFormat = new DecimalFormat("############.##");
        BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
        System.out.println(formattedOutput);

În toate cazurile se utilizează ieșire va fi:2354548.23

Notă:

În timpul rotunjirii puteți adăuga RoundingMode în formatul dumneavoastră. Iată câteva moduri de rotunjire prezentate mai jos:

    decimalFormat.setRoundingMode(RoundingMode.CEILING);
    decimalFormat.setRoundingMode(RoundingMode.FLOOR);
    decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
    decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
    decimalFormat.setRoundingMode(RoundingMode.UP);

Iată importurile:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

Mayank Parihar

Funcționează 100%.

import java.text.DecimalFormat;

public class Formatting {

    public static void main(String[] args) {
        double value = 22.2323242434342;
        // or  value = Math.round(value*100) / 100.0;

        System.out.println("this is before formatting: "+value);
        DecimalFormat df = new DecimalFormat("####0.00");

        System.out.println("Value: " + df.format(value));
    }

}

Nick

Primul import NumberFormat. Apoi adăugați acest lucru:

NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

Acest lucru vă va oferi două zecimale și va pune un semn de dolar dacă este vorba de o monedă.

import java.text.NumberFormat;
public class Payroll 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
    int hoursWorked = 80;
    double hourlyPay = 15.52;

    double grossPay = hoursWorked * hourlyPay;
    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();

    System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
    }

}

Comentarii

  • Întrebarea nu se referă la afișarea unei valute și se răspunde mai exact prin utilizarea funcțiilor de formatare )așa cum este descris în alte răspunsuri). –  > Por yacc.
flosk8

Puteți face acest lucru în felul următor:

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

Comentarii

  • Nu funcționează pentru că se utilizează ## în loc de 00 –  > Por Joaquin Iurchuk.
Edgar Rivas

Știu că acesta este un subiect vechi, dar dacă doriți cu adevărat să aveți punctul în loc de virgulă, salvați rezultatul ca X,00 într-un șir de caractere și apoi schimbați-l pur și simplu pentru un punct, astfel încât să obțineți X.00

Cel mai simplu mod este să folosiți replace.

String var = "X,00";
String newVar = var.replace(",",".");

Rezultatul va fi X.00 pe care l-ați dorit. De asemenea, pentru a simplifica lucrurile, puteți face totul dintr-o dată și salva într-o variabilă dublă:

Double var = Double.parseDouble(("X,00").replace(",",".");

Știu că acest răspuns nu este util acum, dar poate că cineva care verifică acest forum va căuta o soluție rapidă ca aceasta.