Saya mencari cara mudah dalam JavaScript untuk memeriksa apakah angka memiliki tempat desimal di dalamnya (untuk menentukan apakah itu bilangan bulat). Misalnya,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Saya mencari cara mudah dalam JavaScript untuk memeriksa apakah angka memiliki tempat desimal di dalamnya (untuk menentukan apakah itu bilangan bulat). Misalnya,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Menggunakan modulus akan bekerja:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Catatan bahwa ini didasarkan pada numerik nilai dari nomor tersebut, terlepas dari format. Ini memperlakukan string numerik yang berisi bilangan bulat dengan titik desimal tetap sama dengan bilangan bulat:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
memiliki titik desimal secara pemrograman, kecuali jika dinyatakan sebagai string. Selain itu, tidak ada solusi lain yang memilih untuk tidak menangani hal itu ;-)"10."
adalah bilangan bulat dan hasilnya akan persis sama dengan"10"
atau10
.Number.isInteger () adalah bagian dari standar ES6 dan tidak didukung di IE11.
Itu mengembalikan false untuk
NaN
,Infinity
dan argumen non-numerik sementarax % 1 != 0
mengembalikan true.sumber
Number.isInteger(12.0)
kembalitrue
.Number.isInteger('1e3')
adalahfalse
, meskipunNumber.isInteger(1e3)
benar. Dengan asumsi maksud pertanyaan adalah untuk menemukan nilai-nilai non-integer (daripada keberadaan sebenarnya dari titik desimal dalam representasi), maka nilai string '12 .0 ' harus lulus karena mewakili bilangan bulat, tetapi sekali lagi,Number.isInteger('12.0')
adalahfalse
.number
keseluruhan atau tidak. Jika input Anda berupa string, Anda harus mengubahnya menjadi yangnumber
pertama misalnya viaparseFloat()
, tentu saja.Atau Anda bisa menggunakan ini untuk mengetahui apakah BUKAN desimal:
sumber
yournumber.toString.indexOf(".")
Solusi yang paling umum adalah dengan memotong bagian bilangan bulat dari angka dan membandingkannya dengan nol seperti ini:
sumber
startVal != Math.floor(startVal)
?Math.Floor
fungsi mengambil nilai desimal dan nilai desimal terbesar diperbolehkan dalam JavaScript adalah2^53 - 1
atau9007199254740991
. Karena893144042145698745.3
lebih besar dari maksimum ini, fungsinya akan gagal.Sederhana tetapi efektif!
sumber
Math.floor(3.0) == 3.0
benar,Math.floor(3.3) == 3.3
salah// Bagaimana dengan byte-ing itu?
Saya selalu merasa agak buruk untuk operator bit di javascript-
mereka jarang berolahraga.
sumber
>>
mengubah nilai menjadi bilangan bulat 32-bit yang ditandatangani .Cukup keren dan berfungsi untuk hal-hal seperti XX.0 juga! Ini bekerja karena Math.floor () memenggal desimal apa pun jika memiliki desimal sehingga jika lantai berbeda dari angka semula, kita tahu itu desimal! Dan tidak ada konversi string :)
sumber
sumber
num= 999999999999999999999
.Number.isInteger()
mungkin yang paling ringkas. Ini mengembalikan true jika itu adalah bilangan bulat, dan false jika tidak.sumber
sumber
ketika melewati nomor,
parseInt()
cukup kembalikan nomor itu sebagai int:sumber
parseInt(3.0) === 3.0 // true
mengkonversi string angka menjadi array, dibagi dengan titik desimal. Kemudian, jika array hanya memiliki satu nilai, itu berarti tidak ada desimal dalam string.
Dengan cara ini Anda juga bisa tahu apa bilangan bulat dan desimal sebenarnya. contoh yang lebih maju adalah.
sumber
Berikut kutipan dari perpustakaan penjaga saya (terinspirasi oleh JavaScript Efektif oleh David Herman):
sumber
Anda dapat mengalikannya dengan 10 dan kemudian melakukan " modulo " operasi / divisi dengan 10 , dan periksa apakah hasil dari dua operasi itu nol. Hasil dari dua operasi itu akan memberi Anda digit pertama setelah titik desimal. Jika hasilnya sama dengan nol maka jumlahnya adalah bilangan bulat.
sumber
sumber
Anda dapat menggunakan operasi bitwise yang tidak mengubah nilai (
^ 0
atau~~
) untuk membuang bagian desimal, yang dapat digunakan untuk pembulatan. Setelah membulatkan angka, itu dibandingkan dengan nilai aslinya:sumber
sumber
Anda dapat menggunakan fungsi berikut untuk memeriksa apakah suatu angka memiliki tempat desimal:
Jadi ternyata beberapa pengguna menginginkan penjelasan. Saya akan memecahnya menjadi potongan-potongan: (num% 1)
Parenthesis berarti melakukan operasi tersebut terlebih dahulu. num - variabel yang diteruskan oleh fungsi. % - simbol modulus yang mencoba membagi angka kiri dengan kanan. Jika ada sisa itu mengembalikannya sebagai desimal. Jika dibagi secara merata, mengembalikan 0.
Jadi, jumlahkan apa yang kita miliki sejauh ini., (Num% 1) akan kembali:
0 bila dibagi secara merata ATAU #. ##### jika tidak
0 == salah.
[ANY_NUMBER_NOT_ZERO] == true.
Contoh: Boolean baru (0) salah Boolean baru palsu (12312.1231) benar
Alternatif lain: Seorang pengguna dapat mencoba mengembalikan nilai (num% 1)., Yang pada dasarnya akan mencapai hal yang sama. Karena return (0) salah dan return (1.213113) benar.
Tetapi saya ingin mengembalikan nilai boolean. Jadi sebagai jalan pintas untuk memaksa nilai menjadi boolean saya menambahkan! simbol sebelum itu.
Sebanyak mungkin yang tahu.,! berarti TIDAK. Tapi itu juga memaksa nilai menjadi boolean.
Sejak! symobol memaksa nilai menjadi boolean dan nilai itu terbalik. Saya menggunakan !! untuk memaksa nilai menjadi boolean dan membalikkan nilainya kembali ke nilai boolean aslinya.
sumber
Fungsi untuk memeriksa nomor adalah Desimal atau bilangan bulat
sumber
Mungkin ini bekerja untukmu?
Menggunakan regex untuk memeriksa apakah ada koma di nomor tersebut, dan jika tidak ada, maka itu akan menambahkan koma dan garis.
sumber
Gunakan berikut ini jika nilainya string (misalnya dari
<input
):Saya menambahkan
.toString()
ke lantai untuk membuatnya berfungsi juga untuk kasus-kasus ketikavalue == "1."
(diakhiri dengan pemisah desimal atau string lain). JugaMath.floor
selalu mengembalikan beberapa nilai sehingga.toString()
tidak pernah gagal.sumber