Bagaimana cara mencetak pelampung dengan 2 tempat desimal di Jawa?


Jawaban:


250

Anda dapat menggunakan printfmetode ini, seperti:

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

Singkatnya, %.2fsintaks memberitahu Java untuk mengembalikan variabel Anda ( val) dengan 2 tempat desimal ( .2) dalam representasi desimal dari angka titik-mengambang ( f) dari awal penentu format ( %).

Ada karakter konversi lain yang dapat Anda gunakan selain f:

  • d: bilangan bulat desimal
  • o: integer oktal
  • e: floating-point dalam notasi ilmiah

13
Harap berhati-hati karena String.format bergantung pada konfigurasi lokal Anda saat ini, Anda mungkin tidak mendapatkan titik sebagai pemisah. Lebih suka menggunakanString.format(java.util.Locale.US,"%.2f", val);
Gomino

1
@gomino Kenapa tidak Locale.FRANCE?
erickson

3
@gomino Tepat. Jadi mengapa Anda menaruh titik dalam jumlah untuk pengguna Prancis?
erickson

1
Saya menambahkan komentar ini sebagai pengingat untuk memperingatkan orang-orang yang berharap untuk selalu memiliki titik sebagai pemisah.
Gomino

6
@gomino Itu masuk akal, tapi saya pikir untuk "lebih suka" hard-coding Locale.USterlalu jauh. Jika Anda perlu membuat hard-code lokal "netral" untuk melipat case, rendering angka, dll., Tentukan Locale.ROOT. Ini akan sesuai untuk teks yang akan dikonsumsi oleh program lain, daripada yang diberikan untuk pengguna manusia. Untuk teks yang disajikan kepada pengguna, hargai lokal mereka, apakah mereka menentukannya secara eksplisit atau default.
erickson

179

Anda bisa menggunakannya DecimalFormat. Salah satu cara untuk menggunakannya:

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

Satu lagi adalah untuk membangunnya menggunakan #.##format.

Saya menemukan semua opsi pemformatan kurang dapat dibaca daripada memanggil metode pemformatan, tapi itu masalah preferensi.


11
Apa yang terjadi dengan System.out.printf("%.2f", value)sintaks? Apakah masih ada?
Anthony Forloney

6
ini. itu masih merupakan pilihan - Anda dapat membatalkan penghapusan jawaban Anda;)
Bozho

Sepertinya ini pilihan saya, karena saya belum tahu cara menggunakan DecimalFormat :) Terima kasih!
via_point

Saya belum melakukan pekerjaan Java yang luas dalam beberapa saat, dan ketika saya terus melihat DecimalFormatjawaban saya langsung mengira saya salah, tetapi terima kasih telah menjelaskannya.
Anthony Forloney

9
tambahkan df.setMinimumFractionDigits(2);untuk memaksa dua digit
Terel

88

Saya akan menyarankan menggunakan String.format () jika Anda memerlukan nilai sebagai Stringdalam kode Anda.

Misalnya, Anda dapat menggunakan String.format()cara berikut:

float myFloat = 2.001f;

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

14
"% .02f" dan "% .2f" adalah hal yang sama
Borzh

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

5
Halo Kevin, jika masuk 10.00, saya hanya mendapat 10. Jika saya ingin menampilkan 10.00 lalu bagaimana saya bisa melakukannya?
Mdhar9e

2
@Mdhar9e useDecimalFormat 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
Bergantung pada lokasi Anda mungkin mendapatkan koma. Jika Anda ingin pemisah titik, gunakan ini: DecimalFormat ("#. ##", DecimalFormatSymbols (Locale.US))
DPM

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

Output adalah 22,35. Jika Anda membutuhkan 3 angka desimal, ubah menjadi "% .3f".



9

Trik sederhana adalah membuat versi variabel Anda yang lebih pendek dengan mengalikannya dengan mis 100, membulatkannya dan membaginya 100.0lagi. Dengan cara ini Anda menghasilkan variabel, dengan 2 tempat desimal :

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

"Trik murah" ini selalu cukup baik untuk saya, dan berfungsi dalam bahasa apa pun (saya bukan orang Jawa, baru mempelajarinya).


1
Ini salah, banyak angka akan mengulangi angka dalam representasi float setelah Anda bagi dengan 100. Karenanya bukan dua tempat desimal.
matt

8

Anda dapat menggunakan kode cepat ini di bawah ini yang mengubah sendiri di akhir. Tambahkan berapa nol yang merujuk setelah titik

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

Variabel y1 sama dengan 0,123456789 sebelumnya. Setelah kode itu berubah menjadi 0,12 saja.


2
Itu tidak menampilkan 0 sebelum titik. Seharusnya DecimalFormat df = new DecimalFormat ("0.00");
Ridhuvarshan

Tentunya! DecimalFormat ("0,00") juga akan berfungsi! Bintik besar.
Bay

6

Lihatlah DecimalFormat

Berikut ini adalah contoh dari tutorial:

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

Jika Anda memilih pola seperti "###. ##", Anda akan mendapatkan dua tempat desimal, dan saya pikir nilainya akan dibulatkan. Anda akan ingin melihat tautan untuk mendapatkan format persis yang Anda inginkan (mis. Apakah Anda ingin mengekor nol)


5

Di bawah ini adalah kode bagaimana Anda dapat menampilkan output data float dengan 2 tempat desimal di Jawa:

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

3

OK - str untuk mengapung.

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

  }
}

Keluaran:

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

1

program kecil sederhana untuk demonstrasi:

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

Lakukan saja String str = System.out.printf("%.2f", val).replace(",", ".");jika Anda ingin memastikan bahwa terlepas dari Lokal pengguna, Anda akan selalu mendapatkan / menampilkan "." sebagai pemisah desimal. Ini adalah suatu keharusan jika Anda tidak ingin membuat program Anda macet jika nanti Anda melakukan semacam konversifloat f = Float.parseFloat(str);


1

Satu masalah yang membuat saya selama satu jam atau lebih, pada DecimalFormat- Ini menangani input ganda dan mengapung berbeda. Bahkan perubahan RoundingMode tidak membantu. Saya bukan ahli tetapi berpikir itu mungkin membantu orang seperti saya. Akhirnya Math.roundmalah menggunakan . Lihat di bawah:

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

Keluaran:

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

Coba ini:-

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


 }

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.