mengkonversi double untuk bilangan bulat di jawa

Di Jawa, saya ingin mengkonversi ganda untuk integer, aku tahu jika anda melakukan hal ini:

double x = 1.5;
int y = (int)x;

anda mendapatkan y=1. Jika anda melakukan hal ini:

int y = (int)Math.round(x);

Anda'll kemungkinan akan mendapatkan 2. Namun, saya bertanya-tanya: sejak ganda representasi bilangan bulat kadang-kadang terlihat seperti 1.9999999998 atau sesuatu, ada kemungkinan bahwa casting ganda yang dibuat melalui Matematika.round() masih akan mengakibatkan terpotong bawah nomor, bukan bulat nomor yang kita cari (yaitu: 1, bukan 2 dalam kode yang diwakili) ?

(dan ya, aku tidak bermaksud seperti itu: ada ada nilai untuk x, dimana y akan menunjukkan hasil yang terpotong bukan bulat representasi dari x?)

Jika demikian: Apakah ada cara yang lebih baik untuk membuat ganda menjadi bulat int tanpa menjalankan risiko pemotongan?


Menemukan sesuatu: Matematika.round(x) mengembalikan panjang, tidak ganda. Oleh karena itu: itu adalah mustahil untuk Matematika.round() untuk mengembalikan nomor tampak seperti 3.9999998. Oleh karena itu, int(Matematika.round()) tidak akan pernah perlu untuk memotong apa-apa dan akan selalu bekerja.

Mengomentari pertanyaan (1)
Larutan

apakah ada kemungkinan bahwa casting ganda yang dibuat melalui Matematika.round() masih akan mengakibatkan terpotong bawah nomor

Tidak, bulat() akan selalu bulat double untuk nilai yang benar, dan kemudian, ia akan dilemparkan ke sebuah lama yang akan memotong setiap tempat desimal. Tapi setelah pembulatan, tidak akan menjadi pecahan bagian yang tersisa.

Berikut ini adalah dokumentasi dari Matematika.round(double):

Kembali terdekat panjang untuk argumen. Hasilnya dibulatkan ke integer dengan menambahkan 1/2, mengambil lantai hasil, dan pengecoran hasil untuk tipe lama. Dengan kata lain, hasilnya adalah sama dengan nilai dari ungkapan:

(panjang)Matematika.lantai(a + 0,5 d)

Komentar (3)

Untuk datatype Double untuk int, anda dapat menggunakan berikut:

Double double = 5.00;

int integer = double.intValue();
Komentar (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Soal tujuan saya.

Komentar (0)