Saya ingin mengkonversi jenis nilai, '3'
, '2.34'
, '0.234343'
, dll untuk nomor. Dalam JavaScript kita dapat menggunakan Number()
, tetapi apakah ada metode serupa yang tersedia di PHP?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
php
casting
type-conversion
Sara
sumber
sumber
Jawaban:
Anda biasanya tidak perlu melakukan ini, karena PHP akan memaksa jenis ini untuk Anda di sebagian besar keadaan. Untuk situasi di mana Anda ingin secara eksplisit mengonversi jenisnya, masukkan :
sumber
.
adalah pemisah titik desimal. en.wikipedia.org/wiki/…Ada beberapa cara untuk melakukannya:
Keluarkan string ke tipe data primitif numerik:
Lakukan operasi matematika pada string:
Gunakan
intval()
ataufloatval()
:Gunakan
settype()
.sumber
(double)
itu hanya alias untuk(float)
.$num = "10" + 1
contoh).intval("9999999999")==2147483647
.intval
berguna karena Anda dapat menggunakannya diarray_map('intval', $arrayOfStrings);
mana Anda tidak dapat melakukan casting.$num = "10" + 1;
lebih baik digunakan$num = "10" * 1;
karena itu tidak akan mengubah nilai (elemen perkalian netral), ini pada dasarnya adalah sesuatutoNumber(..)
karena jenis terakhir akan ditentukan oleh apa yang diperlukan untuk mengonversi string "10" -> (int) 10; "10.1" -> (float) 10.1;Untuk menghindari masalah, cobalah
intval($var)
. Beberapa contoh:sumber
12.7896
?(int)$my_str
tidak akan berhasil karena saya secara khusus berurusan dengan lik string01
dan013
bahwa saya ingin menafsirkan sebagai basis 10 ... Jadi saya ingin cara untuk secara eksplisit menyediakan basis.Dalam bahasa apa pun (dengan mengetik longgar), Anda selalu dapat memberikan string ke angka dengan menambahkan nol.
Namun, ada sangat sedikit pengertian dalam hal ini karena PHP akan melakukannya secara otomatis pada saat menggunakan variabel ini, dan itu akan tetap dilemparkan ke string pada saat output.
Perhatikan bahwa Anda mungkin ingin menyimpan angka putus-putus sebagai string, karena setelah casting untuk mengapung, angka itu dapat diubah tanpa dapat diprediksi, karena sifat nomor float.
sumber
typeof('123'+0)
memberi'string'
, karena'123'+0
memberi'1230'
.0+'123'
untuk mendapatkan123
Kamu bisa menggunakan:
Atau Anda dapat menggunakan:
sumber
is_float
, dan jika itu berlalu kemudian dilempar ke(float)
bukan(int)
.Jika Anda ingin mendapatkan float for
$value = '0.4'
, tetapi int for$value = '4'
, Anda dapat menulis:Ini sedikit kotor, tetapi berhasil.
sumber
strpos($val, '.') === false ? intval($val) : floatval($val);
localeconv()['decimal_point']
bukan'.'
. Satu keuntungan daristrpos
solusi ini adalah hampir 2x lebih cepat dari casting dua kali.2.1e2
, itu memiliki titik desimal, tetapi angka yang dihasilkan adalah bilangan bulat+
operator identitas:,var_dump(+'0.4', +'4')
memberi Anda float dan int. php.net/manual/en/language.operators.arithmetic.phpAnda selalu dapat menambahkan nol untuk itu!
sumber
A non well formed numeric value encountered
. ada ide?Alih-alih harus memilih apakah akan mengonversi
string
keint
ataufloat
, Anda cukup menambahkannya0
, dan PHP akan secara otomatis mengonversi hasilnya ke jenis numerik.sumber
Di PHP Anda dapat menggunakan
intval(string) or floatval(string)
fungsi untuk mengonversi string menjadi angka.sumber
Ya, ada metode serupa di PHP, tetapi sangat sedikit diketahui sehingga Anda jarang akan mendengarnya. Ini adalah operator aritmatika yang disebut " identitas ", seperti yang dijelaskan di sini:
Operator Aritmatika
Untuk mengonversi string numerik ke angka, lakukan hal berikut:
sumber
is_numeric
, jadi punya tempat untuk meletakkan kode untuk menangani string yang tidak dapat dikonversi dengan benar.)Hanya sedikit catatan untuk jawaban yang dapat bermanfaat dan lebih aman dalam beberapa kasus. Anda mungkin ingin memeriksa apakah string benar-benar berisi nilai numerik yang valid terlebih dahulu dan baru kemudian mengonversinya menjadi tipe numerik (misalnya jika Anda harus memanipulasi data yang berasal dari db yang mengubah int menjadi string). Anda dapat menggunakan
is_numeric()
dan kemudianfloatval()
:sumber
Inilah fungsi yang mencapai apa yang Anda cari. Pertama kita memeriksa apakah nilainya dapat dipahami sebagai angka, jika demikian kita mengubahnya menjadi int dan float. Jika int dan float adalah sama (misalnya, 5 == 5.0) maka kami mengembalikan nilai int. Jika int dan float tidak sama (misalnya, 5! = 5.3) maka kami menganggap Anda membutuhkan ketelitian float dan mengembalikan nilai itu. Jika nilainya tidak numerik, kami memberikan peringatan dan mengembalikan nol.
sumber
Saya telah menemukan bahwa dalam JavaScript cara sederhana untuk mengonversi string menjadi angka adalah dengan mengalikannya dengan 1. Ini menyelesaikan masalah penggabungan, karena simbol "+" memiliki banyak kegunaan dalam JavaScript, sedangkan simbol "*" adalah murni untuk perkalian matematika.
Berdasarkan apa yang saya lihat di sini mengenai PHP secara otomatis bersedia menafsirkan string yang mengandung digit sebagai angka (dan komentar tentang penambahan, karena dalam PHP "+" adalah murni untuk penambahan matematis), trik gandakan ini berfungsi dengan baik untuk PHP, juga.
Saya telah mengujinya, dan itu berhasil ... Meskipun tergantung pada bagaimana Anda memperoleh string, Anda mungkin ingin menerapkan fungsi trim () padanya, sebelum mengalikan dengan 1.
sumber
Berikut adalah fungsi yang saya tulis untuk menyederhanakan hal-hal untuk diri saya sendiri:
Ini juga mengembalikan versi singkatan dari boolean, integer, double dan real.
Tipe panggilan dengan parseNumeric yang disetel ke true akan mengonversi string numerik sebelum memeriksa tipe.
Jadi:
ketik ("5", true) akan mengembalikan int
ketik ("3.7", true) akan mengembalikan float
ketik ("500") akan mengembalikan string
Berhati-hatilah karena ini adalah semacam metode pemeriksaan yang salah dan variabel Anda yang sebenarnya masih berupa string. Anda perlu mengonversi variabel aktual ke jenis yang benar jika perlu. Saya hanya perlu untuk memeriksa apakah database harus memuat id item atau alias, sehingga tidak memiliki efek yang tidak terduga karena itu akan diurai sebagai string pada saat run time.
Edit
Jika Anda ingin mendeteksi apakah objek berfungsi tambahkan kasus ini ke sakelar:
sumber
Selain jawaban Boykodev saya menyarankan ini:
sumber
$id_cron = (string)date('YmdHi'); $target_id_cron = $id_cron - 1;
bukannya $ target_id_cron = (int) $ id_cron - 1;A non well formed numeric value encountered
ketika saya ingin mengubah string menjadi mengambang$num = '12,24' * 1
. Ada saran?Anda dapat menggunakan ini untuk mengonversi string ke int di PHP .
sumber
Cukup Anda dapat menulis seperti ini:
sumber
Hanya gandakan angka dengan 1 sehingga string dikonversi menjadi nomor ketik.
sumber
Kamu bisa menggunakan:
Tetapi solusi terbaik adalah menggunakan:
Atau
sumber
Anda dapat mengubah tipe data sebagai berikut
Untuk alasan historis "ganda" dikembalikan jika mengambang.
Dokumentasi PHP
sumber
Semua saran kehilangan tipe numerik.
Bagi saya ini merupakan praktik terbaik:
sumber
PHP akan melakukannya untuk Anda dalam batasan
sumber
Ada jalan:
Menggunakan
is_*
tidak akan bekerja, karenavariable
merupakan:string
.Menggunakan kombinasi
json_encode()
dan kemudianjson_decode()
dikonversi ke bentuk "benar". Jika itu benarstring
maka itu akan menghasilkan output yang salah.Akan menghasilkan:
string(2) "Me" int(0) float(0)
sumber
Saya mendapat pertanyaan "katakanlah Anda menulis fungsi built-in untuk casting integer ke string di PHP, bagaimana Anda menulis fungsi itu" dalam sebuah wawancara pemrograman. Inilah solusinya.
sumber
Saya telah membaca jawaban dan tidak melihat ada yang menyebutkan peringatan terbesar dalam konversi nomor PHP.
Jawaban yang paling banyak disarankan menyarankan melakukan hal berikut:
Itu brilian. PHP melakukan casting langsung. Tetapi bagaimana jika kita melakukan yang berikut?
Apakah PHP menganggap konversi semacam itu valid?
Ternyata iya .
PHP membaca string sampai menemukan karakter non-numerik pertama untuk tipe yang diperlukan. Artinya untuk bilangan bulat, karakter numerik adalah [0-9]. Hasilnya, terbaca
3
, karena berada dalam rentang karakter [0-9], ia terus membaca. Membaca.
dan berhenti di sana karena itu tidak dalam kisaran [0-9].Hal yang sama akan terjadi jika Anda dilemparkan ke float atau double. PHP akan membaca
3
, lalu.
, lalu1
, kemudian4
, dan berhentii
karena itu bukan karakter numerik float yang valid.Akibatnya,
"million" >= 1000000
mengevaluasi menjadi false, tetapi"1000000million" >= 1000000
mengevaluasi ketrue
.Lihat juga:
https://www.php.net/manual/en/language.operators.comparison.php bagaimana konversi dilakukan sambil membandingkan
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion bagaimana string dikonversi ke nomor masing-masing
sumber
Jika Anda tidak tahu sebelumnya apakah Anda memiliki float atau integer,
dan jika string mungkin berisi karakter khusus (seperti spasi, €, dll.),
Dan jika string tersebut mengandung lebih dari 1 titik atau koma,
Anda dapat menggunakan ini fungsi:
sumber
Pendekatan yang berbeda:
json_encode($your_array, JSON_NUMERIC_CHECK);
secara opsional decode kembalisumber