Jawaban:
Anda dapat menggunakan printf
metode ini, seperti:
System.out.printf("%.2f", val);
Singkatnya, %.2f
sintaks 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 desimalo
: integer oktale
: floating-point dalam notasi ilmiahLocale.FRANCE
?
Locale.US
terlalu 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.
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.
System.out.printf("%.2f", value)
sintaks? Apakah masih ada?
DecimalFormat
jawaban saya langsung mengira saya salah, tetapi terima kasih telah menjelaskannya.
df.setMinimumFractionDigits(2);
untuk memaksa dua digit
Saya akan menyarankan menggunakan String.format () jika Anda memerlukan nilai sebagai String
dalam kode Anda.
Misalnya, Anda dapat menggunakan String.format()
cara berikut:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat);
double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
DecimalFormat df = new DecimalFormat("0.00");
float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));
Output adalah 22,35. Jika Anda membutuhkan 3 angka desimal, ubah menjadi "% .3f".
Banyak orang telah menyebutkannya DecimalFormat
. Tetapi Anda juga dapat menggunakan printf
jika Anda memiliki versi terbaru Java:
System.out.printf("%1.2f", 3.14159D);
Lihat dokumen pada Formatter untuk informasi lebih lanjut tentang string format printf .
Trik sederhana adalah membuat versi variabel Anda yang lebih pendek dengan mengalikannya dengan mis 100
, membulatkannya dan membaginya 100.0
lagi. 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).
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.
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)
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
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)
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);
}
}
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);
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.round
malah 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
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);
}
}
String.format(java.util.Locale.US,"%.2f", val);