Advertisement
  1. Code
  2. PHP

Integer, Float dan String Angka PHP

by
Difficulty:BeginnerLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Dian Sapta Priambogo (you can also view the original English article)

Bekerja dengan angka dalam PHP tampaknya merupakan konsep yang sepele tetapi bisa sangat membingungkan. Awalnya terlihat mudah karena PHP menyediakan konversi tipe otomatis. Misalnya, Anda dapat menetapkan nilai integer ke variabel dan jenis variabel yang akan menjadi integer. Pada baris berikutnya, Anda dapat menetapkan string ke variabel yang sama dan jenisnya akan berubah menjadi string. Sayangnya, konversi otomatis ini terkadang dapat merusak kode Anda.

Ada banyak jenis untuk nilai numerik juga. Dalam tutorial ini, Anda akan belajar tentang integer dan float di PHP, serta fungsi-fungsi yang dapat digunakan untuk menentukan jenis angka yang kita hadapi dan konversi di antara mereka. Anda juga akan belajar cara mengonversi integer dan float ke dan dari string numerik.

Berbagai Jenis Angka dalam PHP

Integer

Jenis angka paling dasar dalam PHP adalah integer. Seperti yang mungkin sudah Anda ketahui, integer adalah angka tanpa bagian desimal. Sebagai contoh, 2 adalah sebuah integer dan 235298 atau -235298 juga termasuk integer. Di sisi lain, 2.0 dan 3.58 adalah float. Kita akan membahasnya secara lebih rinci nanti.

Satu hal penting untuk diingat adalah bahwa tidak perlu bahwa sejumlah angka yang bertipe int jika tidak memiliki bagian desimal. Misalnya, 16 * 2.5 hasilnya tepat 40 tetapi jenis hasil ini masih berupa float. Ketika Anda mengalikan angka, hasil akhir akan menjadi tipe float jika setidaknya salah satu operan adalah float. Tidak masalah apakah angka terakhir memiliki bagian desimal atau tidak.

Selain itu, nilai maksimum yang mungkin dimiliki integer dalam PHP di sistem Anda dapat diperoleh dengan menggunakan konstan PHP_INT_MAX. Nilai yang lebih besar daripada nilai yang dikembalikan oleh PHP_INT_MAX akan disimpan sebagai float meskipun terlihat seperti integer.

Secara umum, Anda akan mengharapkan hasil dari perkalian dua variabel dari tipe int menjadi tipe int. Namun, itu tidak benar jika terjadim overflow. Mengalikan lima atau enam angka berbeda dapat dengan mudah membawa Anda keluar dari batasan tipe int. Sebagai contoh, hasil dari 128*309*32*43*309 adalah float di sistem saya karena melebihi nilai PHP_INT_MAX yaitu 2147483647.

Anda dapat menggunakan fungsi is_int($value) untuk memeriksa apakah suatu bilangan bertipe integer. Ada dua alias fungsi ini disebut is_integer($value) dan is_long($value). Keduanya akan memberikan hasil yang sama.

Float

Tipe nomor paling umum berikutnya yang akan Anda tangani adalah float. Tidak seperti integer, yang hanya berupa angka tanpa titik desimal dalam banyak kasus, nomor bertipe float dapat direpresentasikan dalam berbagai cara. Nilai 3.1412.05.87E+10 dan 3.56E-5semuanya berbentuk float.

PHP akan secara otomatis mengonversi angka ke tipe float setiap kali desimal atau angka yang sangat besar terlibat. Tipe float umumnya dapat menyimpan nomor dengan besarnya kurang lebih sama dengan 1.7976931348623E+308. Namun, ini tergantung platform.

Nilai 1.7976931348623E+308 mungkin tampak seperti nilai yang sangat besar—​​dan memang benar!—tetapi float memiliki ketepatan maksimum hanya sekitar 14 digit. Angka apa pun dengan angka lebih banyak dari itu akan kehilangan presisi. Itu berarti Anda dapat menyimpan jumlah yang sangat besar, tetapi Anda tidak akan dapat menyimpan informasi tentang nilai pastinya—dalam banyak kasus, float hanya merupakan perkiraan.

Ada dua fungsi yang dapat digunakan untuk menentukan apakah nilai yang Anda hadapi adalah float. Fungsi-fungsi ini adalah is_float() dan is_double(). Sebenarnya, is_double() hanyalah sebuah alias dari is_float()sehingga Anda dapat menggunakan salah satu dari mereka dan mendapatkan hasil yang sama.

Infinity dan NaN

Ada dua jenis nilai numerik yang mungkin harus Anda tangani saat menulis program yang berkaitan dengan Matematika. Nilai-nilai ini tak terhingga dan NaN (bukan angka). Kedua nilai ini memerlukan sedikit penjelasan karena mereka berbeda dari apa yang Anda harapkan.

Infinity dalam PHP berbeda dengan infinity dalam kehidupan nyata. Dalam PHP, nilai numerik apa pun di atas sekitar PHP_FLOAT_MAXpada platform dianggap tak terbatas. Jadi, 1.8e308 akan memberi Anda float(INF) di var_dump(). Anda dapat memeriksa apakah nilai numerik terbatas atau tak terbatas menggunakan fungsi is_finite() dan is_infinite().

Demikian pula, NaN singkatan dari Not a Number tetapi tidak memeriksa apakah sebuah nilai numerik atau tidak. Nilai NaNdigunakan untuk hasil operasi matematika yang tidak mungkin dalam matematika. Misalnya, log(-1) akan menjadi NaN. Demikian pula, acos(5) juga akan menjadi NaN. Anda dapat memeriksa apakah nilai yang dikembalikan oleh operasi matematika bukan angka dengan menggunakan fungsi is_nan().

String Angka dalam PHP

Sama seperti PHP yang secara dinamis mengubah jenis angka yang berbeda berdasarkan pada bagaimana nilai-nilai mereka digunakan atau ditugaskan, itu juga dapat menyimpulkan nilai string numerik yang berbeda bagi Anda untuk mengubahnya menjadi angka.

. Fungsi is_numeric() dapat membantu Anda menentukan apakah string atau variabel memang numerik atau tidak. Fungsi ini akan mengembalikan true untuk angka yang ditulis dalam notasi oktal, biner atau heksadesimal. Ini juga akan mengembalikan true jika angka-angka ditulis dalam notasi eksponensial seperti +16.52e39.

Mulai dari PHP 7.0.0, ketika Anda meneruskan string ke is_numeric(), itu hanya mengembalikan true jika string terdiri dari tanda opsional, beberapa digit, desimal opsional, dan bagian eksponensial opsional. Ini berarti bahwa string angka yang ditulis dalam format heksadesimal atau biner akan mengembalikan false dari PHP 7.0.0 dan seterusnya.

PHP secara implisit akan memberikan string numerik apa pun yang valid ke suatu angka ketika diperlukan. Contoh-contoh berikut akan membantu Anda memahami proses ini dengan lebih baik.

Seperti yang Anda lihat, semua string numerik yang valid dikonversi ke nilai masing-masing sebelum penambahan atau operasi lainnya dilakukan. Tipe $num pada akhirnya tergantung pada nilai akhirnya.

Dalam kasus terakhir, string heksadesimal "0xfedd24" tidak dikonversi ke nilai desimal karena PHP 7 tidak menganggapnya sebagai string numerik yang valid.

Memasukkan String dan Float ke Integer

Sesekali, Anda harus memasukkan satu jenis nilai numerik ke yang lain. PHP memiliki beragam fungsi dan teknik untuk melakukannya. Sebagian besar waktu, konversi akan tersirat dan Anda tidak perlu khawatir tentang hal itu. Namun, jika Anda harus melakukan konversi secara eksplisit teknik yang disebutkan di sini pasti akan membantu.

Anda dapat menggunakan (int) atau (integer) untuk mengonversi nilai apa pun menjadi integer. Dalam kasus float, nilai akan selalu dibulatkan ke nol. Cara lain untuk memasukkan string dan float ke integer adalah dengan bantuan fungsi intval(). Baik (int) dan intval() bekerja dengan cara yang persis sama.

Anda harus mencatat bahwa memasukkan string yang meluap ke integer akan menetapkan nilai akhir ke nilai integer maksimum yang diizinkan. Namun, memasukkan float yang nilainya lebih dari nilai integer maksimum yang dibolehkan akan menghasilkan nilai terombang-ambing antara -2147483648 dan 2147483647!

Dalam situasi tertentu, Anda mungkin harus berurusan dengan angka yang sangat besar tanpa kehilangan presisi. Misalnya, tidak mungkin untuk mendapatkan hasil yang akurat dari perkalian 987233498349834828 dan 3487197512 menggunakan operator *. Ini akan memberi Anda 3.4426781992086E+27 setelah konversi float. Menghitung jawaban aktual, yaitu 3442678199208600117812547936, akan membutuhkan penggunaan library seperti BCMath. BCMath bekerja dengan menyimpan angka sebagai string dan melakukan operasi aritmatika secara manual. Ingatlah bahwa jika Anda menggunakan BCMath, Anda akan berurusan dengan string, bukan integer dan float.

Library tertentu akan menginginkan Anda untuk hanya mengirimkan nomor bertipe int ke metode mereka, tetapi Anda mungkin secara tidak sadar memberi mereka nilai float. Ini mungkin terjadi karena nilainya tampak seperti int karena tidak memiliki bagian desimal. Ini hampir pasti akan menghasilkan kesalahan jika perpustakaan menggunakan fungsi seperti is_int() untuk memeriksa apakah nomor yang dikirimkan adalah tipe integer. Dalam kasus seperti itu, selalu bijaksana untuk terlebih dahulu memasukkan angka ke int menggunakan (int) atau intval() dan kemudian meneruskannya ke fungsi atau metode library apa pun.

Salah satu contoh kapan situasi seperti itu bisa muncul adalah ketika Anda berhadapan dengan fungsi Matematika seperti floor() dan ceil() dll. floor() dan ceil() akan selalu mengembalikan float, bahkan jika Anda memberikan int!

Satu masalah dengan memasukkan float ke integer adalah bahwa Anda akan kehilangan bagian desimal dari angka. Ini mungkin diinginkan atau tidak. Dalam kasus seperti itu, Anda dapat menggunakan fungsi seperti floor() dan hanya memberikan angka ke tipe int jika nilai aktualnya sama dengan nilai yang dikembalikan oleh floor().

Katakanlah Anda memiliki library yang memungkinkan Anda untuk melakukan aritmatika fraksional dan melempar pengecualian ketika Anda meneruskan angka ke metode setNumerator() yang bukan tipe int. Berbagai operasi dapat mengubah angka dalam tipe float bahkan jika itu masih bilangan bulat dalam batas minimum dan maksimum dari tipe int. Menggunakan sesuatu seperti kode di atas akan membantu Anda menangani kasus seperti itu dengan mudah.

Kata Penutup

Tutorial ini telah membahas berbagai cara di mana PHP menyimpan angka dan bagaimana Anda dapat menentukan apakah sebuah nomor bertipe tertentu. Misalnya, Anda dapat menggunakan fungsi seperti is_int() dan is_float() untuk menentukan tipe angka dan melanjutkannya

Seperti yang Anda lihat di tutorial, PHP mendukung konversi tipe otomatis. Ini berarti bahwa terkadang bilangan bulat yang lebih kecil seperti 5 atau 476 bisa disimpan sebagai float tanpa Anda sadari. Menggunakan angka-angka ini dalam fungsi yang hanya menerima nilai int dapat menghasilkan pengecualian atau kesalahan. Kita belajar bahwa solusi sederhana untuk masalah ini adalah dengan secara eksplisit memberikan angka tersebut ke int jika mereka tidak memiliki bagian desimal dan nilainya tidak berubah saat casting.

Setelah membaca tutorial ini, Anda harus dapat menentukan tipe angka atau tipe akhir hasil setelah menggunakan berbagai operasi menggunakan fungsi yang telah ditentukan dan juga secara eksplisit memasukkannya ke tipe tertentu setelah melakukan beberapa pemeriksaan.

Seperti biasa, jika Anda memiliki pertanyaan atau tips tambahan, silakan komentar di bawah.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.