Saya mencoba menemukan cara cepat untuk menghapus zero decimals
dari nilai angka seperti ini:
echo cleanNumber('125.00');
// 125
echo cleanNumber('966.70');
// 966.7
echo cleanNumber(844.011);
// 844.011
Apakah ada beberapa cara yang dioptimalkan untuk melakukan itu?
Jawaban:
$num + 0
lakukan triknya.Secara internal, ini setara dengan casting untuk mengapung dengan
(float)$num
ataufloatval($num)
tetapi saya merasa lebih sederhana.sumber
floatval()
melakukannya.floatval
adalah mengembalikan float. Saya berpendapat menggunakannya sebagai formatter desimal tidak terlalu jelas atau bersih.//COMMENT
Anda bisa menggunakan
floatval
fungsi inisumber
Inilah yang saya gunakan:
NB Asumsi ini
.
adalah pemisah desimal. Ini memiliki keuntungan bahwa ia akan bekerja pada angka yang besar (atau kecil) semena-mena karena tidak ada pelampung apung. Ini juga tidak akan mengubah angka menjadi notasi ilmiah (misalnya 1.0E-17).sumber
Cukup menambahkan
+
ke variabel string Anda akan menyebabkan typecast menjadi (mengambang) dan menghapus nol:sumber
Untuk semua orang yang datang ke situs ini yang memiliki masalah yang sama dengan komata, ubah:
untuk:
Jika ada dua nol yang akan dihapus, maka ubah ke:
Lebih lanjut di sini: Nomor PHP: titik desimal hanya terlihat jika diperlukan
sumber
Jika Anda ingin menghapus digit nol sebelum ditampilkan pada halaman atau templat.
Anda dapat menggunakan sprintf () function
sumber
Anda harus memasukkan angka sebagai pelampung, yang akan melakukan ini untuk Anda.
Output dari ini akan menjadi apa yang Anda cari.
sumber
(float)'0.1234567890124567890123456789'
menjadi0.12345678901246
.Tidak ada yang tidak bisa diperbaiki dengan regex sederhana;)
http://xkcd.com/208/
sumber
0
seperti pada"100"
. Juga gagal0
melepas"100.010"
.$x = preg_replace("/(\.0*$)|((?<=\.\d*)0+$)/",'',$x);
Typecast ke a
float
.sumber
Karena pertanyaan ini sudah lama. Pertama, saya minta maaf tentang ini.
Pertanyaannya adalah tentang nomor xxx.xx tetapi jika itu adalah x, xxx.xxxxx atau pemisah desimal perbedaan seperti xxxx, xxxx ini bisa lebih sulit untuk menemukan dan menghapus nol digit dari nilai desimal.
Dan ini kode untuk tes.
sumber
Hati-hati dengan menambahkan +0.
Hasil ini adalah 1.
sumber
Aneh, ketika saya mendapatkan nomor dari database dengan tipe "float" dan jika nomor saya mantan. 10.000 ketika saya mengapung, itu menjadi 1.
Saya sudah menguji semua solusi di atas tetapi tidak berhasil.
sumber
sumber
Cara rumit tetapi berfungsi:
solusi di atas adalah cara optimal tetapi jika Anda ingin memiliki Anda sendiri, Anda bisa menggunakan ini. Apa yang dilakukan algoritma ini dimulai pada akhir string dan memeriksa apakah 0 , jika diset ke string kosong dan kemudian beralih ke karakter berikutnya dari belakang hingga karakter terakhir adalah > 0
sumber
Kamu bisa memakai:
sumber
Itulah solusi kecil saya ... Dapat dimasukkan ke kelas dan mengatur vars
private $ dsepparator = '.'; // desimal pribadi $ tsepparator = ','; // ribu
Itu dapat diatur oleh konstruktor dan diubah ke pengguna lang.
sumber
Ini solusi saya. Saya ingin menjaga kemampuan untuk menambahkan ribuan pemisah
sumber
Ini adalah fungsi satu garis sederhana menggunakan rtrim, save separator dan titik desimal:
sumber
Saya menemukan solusi ini adalah yang terbaik:
sumber
Sederhana dan akurat!
sumber
Solusi Utama: Satu-satunya cara aman adalah menggunakan regex:
itu akan bekerja untuk kasus apa pun
sumber
Berikut ini jauh lebih sederhana
sumber
sumber
Kode ini akan menghapus nol setelah titik dan hanya akan mengembalikan dua digit desimal.
$ number = 1200.0000;
str_replace ('. 00', '', number_format ($ number, 2, '.', ''));
Output akan menjadi: 1200
sumber