Saya mengalami beberapa masalah saat memformat desimal ganda. Jika saya memiliki nilai ganda, misalnya 4.0, bagaimana cara memformat desimal sehingga menjadi 4,00?
Saya mengalami beberapa masalah saat memformat desimal ganda. Jika saya memiliki nilai ganda, misalnya 4.0, bagaimana cara memformat desimal sehingga menjadi 4,00?
Jawaban:
Salah satunya adalah dengan menggunakan NumberFormat .
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
Keluaran:
4.00
Dengan Java 8, Anda dapat menggunakan format
metode ..: -
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
digunakan untuk floating
nilai poin ..2
setelah desimal menunjukkan, jumlah tempat desimal setelahnya .
Untuk sebagian besar versi Java, Anda dapat menggunakan DecimalFormat
: -
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
Gunakan String.format :
String.format("%.2f", 4.52135);
Sesuai dokumen:
Lokal yang selalu digunakan adalah yang dikembalikan oleh
Locale.getDefault()
.
Menggunakan String.format, Anda dapat melakukan ini:
double price = 52000;
String.format("$%,.2f", price);
Perhatikan koma yang membuatnya berbeda dari jawaban @ Vincent
Keluaran:
$52,000.00
Sumber yang bagus untuk memformat adalah halaman java resmi tentang masalah ini
Anda selalu bisa menggunakan metode statis printf from System.out
- Anda kemudian akan mengimplementasikan formatter yang sesuai; ini menghemat ruang heap di mana contoh lain harus Anda lakukan.
Ex:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
Menghemat ruang tumpukan yang merupakan bonus yang cukup besar, namun saya berpendapat bahwa contoh ini jauh lebih mudah dikelola daripada jawaban lainnya, terutama karena sebagian besar pemrogram mengetahui fungsi printf dari C (Java mengubah sedikit fungsi / metode).
out
adalah PrintStream
.
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
new DecimalFormat("#0.00").format(4.0d);
Metode alternatif adalah menggunakan setMinimumFractionDigits
metode dari NumberFormat
kelas.
Di sini Anda pada dasarnya menentukan berapa banyak angka yang ingin Anda munculkan setelah koma desimal.
Jadi masukan 4.0
akan menghasilkan 4.00
, dengan asumsi jumlah yang Anda tentukan adalah 2.
Tetapi, jika Double
masukan Anda berisi lebih dari jumlah yang ditentukan, maka akan mengambil jumlah minimum yang ditentukan, lalu tambahkan satu digit lagi dibulatkan ke atas / bawah
Misalnya, 4.15465454
dengan jumlah minimal 2 yang ditentukan akan menghasilkan4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
Ada banyak cara untuk melakukan ini. Itu diberikan di bawah ini:
Misalkan nomor asli Anda diberikan di bawah ini:
double number = 2354548.235;
Menggunakan NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
Menggunakan String.format:
System.out.println(String.format("%,.2f", number));
Menggunakan DecimalFormat dan pola:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
Menggunakan DecimalFormat dan pola
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
Dalam semua kasus, outputnya adalah: 2354548.23
Catatan :
Selama pembulatan, Anda dapat menambahkan RoundingMode
formatter Anda. Berikut adalah beberapa mode pembulatan yang diberikan di bawah ini:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
Berikut impornya :
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
Anda dapat menggunakan salah satu metode di bawah ini
Jika Anda menggunakan java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
ATAU
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
Jika Anda ingin mengubahnya menjadi format string sederhana
System.out.println(String.format("%.2f", 4.0));
Semua kode di atas akan mencetak 4,00
Bekerja 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));
}
}
Impor pertama NumberFormat
. Kemudian tambahkan ini:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
Ini akan memberi Anda dua tempat desimal dan memberi tanda dolar jika berhubungan dengan mata uang.
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));
}
}
Anda dapat melakukannya sebagai berikut:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
alih-alih00
Saya tahu bahwa ini adalah topik lama, tetapi Jika Anda benar-benar ingin memiliki titik dan bukan koma, simpan saja hasil Anda sebagai X, 00 ke dalam String dan kemudian cukup ubah untuk jangka waktu sehingga Anda mendapatkan X.00
Cara termudah adalah dengan menggunakan replace.
String var = "X,00";
String newVar = var.replace(",",".");
Outputnya adalah X.00 yang Anda inginkan. Juga untuk membuatnya mudah Anda bisa melakukan semuanya sekaligus dan menyimpannya menjadi variabel ganda:
Double var = Double.parseDouble(("X,00").replace(",",".");
Saya tahu bahwa balasan ini tidak berguna sekarang tetapi mungkin seseorang yang memeriksa forum ini akan mencari solusi cepat seperti ini.
String.format()
ataujava.text.Format
.