Java - Pembulatan ke dua tempat desimal berdasarkan nilai desimal ketiga [duplikat]
Saya telah duduk di atasnya selama sehari sekarang berpikir seperti siswa sekolah dasar 5.
public class Tester
{
static String actualValue = "";
private static DecimalFormat df2 = new DecimalFormat("#.##"); //To round off to two decimal places.
static double regPrice = 0.0;
static double regPrice2 = 0.0;
public static void main(String[] args)
{
regPrice2 = 1506.365;
System.out.println("reg price 1 is: "+regPrice2);
System.out.println("reg price 1 after rounding is is: "+round(regPrice2));
regPrice = 8535.765;
System.out.println("reg price is: "+regPrice);
System.out.println("reg price after rounding is: "+round(regPrice));
}
public static double round(double value)
{
df2.setRoundingMode(RoundingMode.HALF_UP);
String returnValue = df2.format(value);
double actualValue = Double.parseDouble(returnValue);
return actualValue;
}
}
Keluaran | Nilai 1 | Nilai 2 |
---|---|---|
Sebenarnya | 1506,37 | 8535. 76 |
Diharapkan | 1506,37 | 8535. 77 |
Mengapa pembulatan berhasil untuk angka pertama tetapi tidak untuk angka kedua? Bagaimana saya bisa membuat ini bekerja?
Jawaban
1 TomášZáluský
Berkat representasi floating-point, apa yang menurut Anda 1506.365 atau 8535.765 sebenarnya adalah angka yang sedikit lebih besar atau lebih kecil dari yang Anda harapkan. Angka floating-point direpresentasikan sebagai mantissa dan eksponen. Karenanya misalnya untuk 0,365 dan 0,765 pembulatan dilakukan secara berbeda. Pembulatan di dekat bagian kemudian muncul dalam arah acak. Gunakan BigDecimal
jika Anda membutuhkan nomor yang tepat.
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'