Apa cara yang benar untuk membulatkan string PHP ke dua tempat desimal?
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
Outputnya harus 520.00
;
Bagaimana seharusnya round_to_2dp()
definisi fungsinya?
php
formatting
numbers
rounding
number-formatting
Bradshaw yang kaya
sumber
sumber
round
adalah fungsi matematika, dan ini hanya masalah pemformatan.Jawaban:
Anda dapat menggunakan number_format () :
Contoh:
Fungsi ini mengembalikan string .
sumber
round
tidak menyelesaikan masalah OP di sini.round("520", 2)
mengembalikan float520
, dan gema yang tentu saja tidak akan menunjukkannya ke 2 tempat desimal. Untuk tujuan OP - menunjukkan bilangan bulat ke 2 tempat desimal dengan menambahkannya dengan angka nol - Anda memerlukan fungsi pemformatan angka, bukan fungsi pembulatan.520,00
alih-alih520.00
, ini hanya berfungsi.Gunakan
round()
(gunakan jika Anda mengharapkan angka dalam format float saja, kalau tidak gunakan number_format () sebagai jawaban yang diberikan oleh Codemwnci ):Dari manual:
...
sumber
round($number, 2);
tidak bekerja. Saya ingin 520,00 bukan 520. Tidak percaya putaran tidak melakukan itu secara default.Kalau tidak,
sumber
520,00
? Saya kira jawaban lain berfungsi lebih baik dalam hal ini.http://php.net/manual/en/function.round.php
misalnya
sumber
Mencoba:
Outputnya adalah:
sumber
Anda dapat menggunakan PHP
printf
atausprintf
fungsinya:Contoh dengan
sprintf
:Anda dapat menjalankan hal yang sama tanpa
echo
. Contoh:sprintf("%.3f", $num);
Keluaran:
Atau, dengan
printf
:Keluaran:
sumber
Cara lain yang lebih eksotis untuk menyelesaikan masalah ini adalah menggunakan
bcadd()
dengan nilai dummy untuk $ right_operand of0
.sumber
bc*
fungsi tidak bulat, mereka selalu bulat. Misalnya,bcadd("1.0999","0.0",1)
menghasilkan "1.0", bukan "1.1".$scale
angka fraksional. Ini sama dengan pembulatan ke nol.Gunakan fungsi PHP number_format () .
Sebagai contoh,
Outputnya adalah:
sumber
Gunakan fungsi PHP number_format () .
sumber
Ini akan menampilkan tepat dua digit setelah titik desimal.
Keuntungan:
Jika Anda ingin menampilkan dua digit setelah nilai float saja dan bukan untuk int, maka gunakan ini.
sumber
round_to_2dp
adalah fungsi yang ditentukan pengguna, dan tidak ada yang bisa dilakukan kecuali Anda memposting deklarasi fungsi itu.Namun, tebakan saya melakukan ini:
number_format($number, 2);
sumber
round_to_2dp($number);
dimaksudkan sebagai kodesemu; OP meminta seseorang untuk memberi tahu dia apa yang akan menggantikan ekspresi itu.Pembulatan dengan benar membulatkan angka dan sprintf memaksanya ke 2 tempat desimal jika kebetulan hanya 1 tempat desimal setelah pembulatan.
sumber
Ini akan mengembalikan 5.98 tanpa membulatkan angka.
sumber
floor($retailPrice * 100) / 100;
tidak perlu format angka kemudian.Untuk pembulatan bersyarat yaitu. perlihatkan desimal di mana itu benar-benar diperlukan jika bukan bilangan bulat
123.56 => 12.56
123.00 => 123
sumber
Saya membuat sendiri.
sumber
Di sini saya mendapatkan dua desimal setelah
.
(titik) menggunakan fungsi ...Hasil dari fungsi di atas:
Jawaban Benar Baru
Gunakan fungsi PHP asli bcdiv
sumber
Ini akan memberi Anda 2 angka setelah desimal.
sumber
Jika Anda ingin menggunakan dua digit desimal di seluruh proyek Anda, Anda dapat menentukan:
Maka fungsi berikut akan menghasilkan hasil yang Anda inginkan:
Tetapi jika Anda tidak menggunakan fungsi bcscale, Anda perlu menulis kode sebagai berikut untuk mendapatkan hasil yang Anda inginkan.
Untuk mengetahui lebih lanjut
Fungsi Matematika BC
bcscale
sumber
Angka tanpa putaran
sumber
Berikut solusi lain dengan strtok dan str_pad :
sumber
Menambahkan ke jawaban lain, karena number_format () akan, secara default, menambahkan ribuan pemisah.
Untuk menghapus ini, lakukan ini:
sumber
Contohnya
sumber
Anda dapat menggunakan fungsi PHP round () .
sumber