Saya perlu memformat float ke tempat desimal "n".
sedang mencoba ke BigDecimal, tetapi nilai kembali tidak benar ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Saya perlu mengembalikan nilai float dengan jumlah tempat desimal yang saya tentukan.
Saya perlu Float
pengembalian nilai bukanDouble
.
String.format(java.util.Locale.US,"%.2f", floatValue);
Lihatlah DecimalFormat . Anda dapat dengan mudah menggunakannya untuk mengambil nomor dan memberinya sejumlah tempat desimal.
Edit : Contoh
sumber
DecimalFormat
konstruktor tidak disarankan, lihat jawaban saya untuk penggunaan yang benarNumberFormat
.Coba ini, ini banyak membantu saya
Hasilnya akan menjadi RoundfinalPrice -> 5652.26
sumber
Dari catatan, penggunaan
DecimalFormat
konstruktor tidak disarankan. Javadoc untuk kelas ini menyatakan:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Jadi yang perlu Anda lakukan adalah (misalnya):
sumber
Berikut adalah contoh cepat menggunakan
DecimalFormat
kelas yang disebutkan oleh Nick.Output dari pernyataan cetak adalah 12,35. Perhatikan bahwa itu akan membulatkannya untuk Anda.
sumber
DecimalFormat
konstruktor tidak disarankan, lihat jawaban saya untuk penggunaan yang benarNumberFormat
.Agak terkejut tidak ada yang menunjukkan cara langsung untuk melakukannya, yang cukup mudah.
Cukup yakin ini tidak melakukan pembulatan setengah-setengah sekalipun.
Untuk apa nilainya, pembulatan setengah-setengah akan menjadi kacau dan tidak dapat diprediksi setiap kali Anda mencampur nilai-nilai floating-point berbasis biner dengan aritmatika basis-10. Saya cukup yakin itu tidak bisa dilakukan. Masalah dasarnya adalah bahwa nilai seperti 1,105 tidak dapat direpresentasikan dengan tepat di floating point. Nilai floating point akan menjadi sekitar 1,105000000000001, atau 1,104999999999999. Jadi setiap upaya untuk melakukan pembulatan genap akan naik pada kesalahan pengkodean representasional.
Implementasi floating point IEEE akan melakukan pembulatan setengah, tetapi mereka melakukan pembulatan biner, bukan pembulatan setengah desimal. Jadi kamu mungkin baik-baik saja
sumber
pow
adalah operasi yang terlalu mahal untuk digunakan untuk pembulatan?sumber
Ini adalah cara yang jauh lebih tidak profesional dan jauh lebih mahal tetapi harus lebih mudah dipahami dan lebih bermanfaat bagi pemula.
sumber
Saya pikir apa yang Anda inginkan ist
dan gunakan nilai balik untuk ditampilkan.
akan selalu mengembalikan 625.3 karena ini terutama digunakan untuk menghitung sesuatu.
sumber
Saya mencari jawaban untuk pertanyaan ini dan kemudian saya mengembangkan metode! :) Peringatan yang adil, itu mengumpulkan nilai.
sumber