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
Anthony Forloney
sumber
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.

Bozho
sumber
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);
John P.
sumber
14
"% .02f" dan "% .2f" adalah hal yang sama
Borzh
40
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
Kevin Sylvestre
sumber
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
Phan Van Linh
sumber
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".

Aldin Philo
sumber
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).

Birk
sumber
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.

Teluk
sumber
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)

Uri
sumber
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
Keshav Gera
sumber
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)

sumber
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);
    }
}
Pavan vadrevu
sumber
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);

Paul Efford
sumber
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
pengguna2984447
sumber
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);
      }


 }
Perangkat Lunak Nathani
sumber
Untuk Perincian lebih lanjut: - makecodesimpleandeasy.blogspot.com/2019/08/...
Nathani Software