Apakah mungkin melakukan ini?
double variable;
variable = 5;
/* the below should return true, since 5 is an int.
if variable were to equal 5.7, then it would return false. */
if(variable == int) {
//do stuff
}
Aku tahu kode mungkin tidak pergi sesuatu seperti itu, tapi bagaimana tidak pergi?
double
danint
diwakili dalam memori secara berbeda, dan Anda akan menggunakan satu atau yang lain berdasarkan konteks penanganan memori Anda.Jawaban:
Ini memeriksa apakah nilai bulat dari ganda sama dengan ganda.
Variabel Anda bisa memiliki nilai int atau dobel dan
Math.floor(variable)
selalu memiliki nilai int, jadi jika variabel Anda sama denganMath.floor(variable)
maka harus memiliki nilai int.Ini juga tidak berfungsi jika nilai variabel tidak terbatas atau negatif tak terbatas maka menambahkan 'selama variabel tidak tidak terbatas' dengan kondisi.
sumber
int
jikaif
dievaluasitrue
.Atau Anda dapat menggunakan operator modulo:
(d % 1) == 0
sumber
Math.rint(d)
?d
dalam C dan C ++.Jambu:
DoubleMath.isMathematicalInteger
. (Pengungkapan: Saya menulisnya.) Atau, jika Anda belum mengimpor Jambu,x == Math.rint(x)
adalah cara tercepat untuk melakukannya;rint
secara terukur lebih cepat darifloor
atauceil
.sumber
sumber
Coba dengan cara ini,
sebagai contoh:
maka 12,9 adalah tidak integer, namun
karenanya 12.0 adalah integer
sumber
Ini versi untuk
Integer
danDouble
:Untuk mengkonversi
Double
keInteger
:sumber
Mempertimbangkan:
Ini menempel pada Java inti dan menghindari perbandingan kesetaraan antara nilai floating point (
==
) yang dianggap buruk. TheisFinite()
diperlukan karenarint()
akan pass-through nilai tak terhingga.sumber
Cara terbaik adalah dengan operator modulus
sumber
Ini solusi yang bagus:
sumber
(bool)
pemain?Mirip dengan jawaban SkonJeet di atas, tetapi kinerjanya lebih baik (setidaknya dalam java):
sumber
sumber
Anda bisa mencoba dengan cara ini: dapatkan nilai integer dari double, kurangi ini dari nilai double asli, tentukan rentang pembulatan dan uji apakah angka absolut dari nilai ganda baru (tanpa bagian integer) lebih besar atau lebih kecil dari Anda rentang yang ditentukan. jika lebih kecil, Anda bisa bermaksud itu adalah nilai integer. Contoh:
Jika Anda menetapkan ke d nilai 33,15 metode mengembalikan true. Untuk mendapatkan hasil yang lebih baik, Anda dapat menetapkan nilai yang lebih rendah ke testRange (0,0002) sesuai kebijakan Anda.
sumber
Secara pribadi, saya lebih suka solusi operasi modulo sederhana dalam jawaban yang diterima. Sayangnya, SonarQube tidak menyukai tes kesetaraan dengan floating point tanpa menetapkan presisi bulat. Jadi kami telah mencoba menemukan solusi yang lebih sesuai. Ini dia:
Remainder(BigDecimal)
mengembalikanBigDecimal
nilai yang(this % divisor)
. Jika yang ini sama dengan nol, kita tahu tidak ada floating point.sumber
Solusi sederhana saya:
sumber
Inilah solusinya:
sumber