Di Java, saya ingin mengubah double menjadi integer, saya tahu jika Anda melakukan ini:
double x = 1.5;
int y = (int)x;
Anda mendapatkan y = 1. Jika kamu melakukan ini:
int y = (int)Math.round(x);
Anda mungkin akan mendapatkan 2. Namun, saya bertanya-tanya: karena representasi ganda dari bilangan bulat terkadang terlihat seperti 1,9999999998 atau sesuatu, apakah ada kemungkinan bahwa casting ganda yang dibuat melalui Math.round () masih akan menghasilkan angka yang terpotong, bukan dari angka bulat yang kita cari (yaitu: 1 bukan 2 dalam kode seperti yang diwakili)?
(dan ya, aku berarti seperti itu: Apakah ada setiap nilai x, di mana y akan menunjukkan hasil yang merupakan terpotong daripada representasi bulat x?)
Jika ya: Apakah ada cara yang lebih baik untuk mengubah int yang membulat tanpa risiko pemotongan?
Figured sesuatu: Math.round (x) mengembalikan panjang, bukan ganda. Oleh karena itu: tidak mungkin Math.round () mengembalikan angka seperti 3.9999998. Oleh karena itu, int (Math.round ()) tidak perlu memotong apa pun dan akan selalu berfungsi.
Jawaban:
Tidak,
round()
akan selalu membulatkan penggandaan Anda ke nilai yang benar, dan kemudian, itu akan dilemparkan kelong
yang akan memotong tempat desimal manapun. Tetapi setelah pembulatan, tidak akan ada bagian pecahan yang tersisa.Ini dokumen dari
Math.round(double)
:sumber
[max double: 1.7976931348623157E308]
ke int yang jauh lebih kecil[max int: 2147483647]
. Hanya sesuatu yang perlu diingat.Untuk tipe data
Double
keint
, Anda dapat menggunakan berikut ini:sumber
Memecahkan tujuan saya.
sumber