Halo rekan-rekan Laravel! 👋
Saat mengembangkan aplikasi, sering kali kita menghadapi situasi di mana nilai numerik dimasukkan dalam bentuk string, terutama dari input pengguna atau API. Contohnya, pengguna mungkin memasukkan angka dengan format seperti "12,345"
atau "1.234,56"
, tergantung pada lokalnya. Hal ini bisa menjadi tantangan ketika kita ingin menggunakannya untuk perhitungan atau menyimpannya di database sebagai nilai desimal.
Dalam diskusi ini, saya ingin berbagi solusi untuk mengubah string menjadi decimal dengan cara yang efektif di Laravel. Saya juga ingin mendengar tips dan trik dari Anda untuk membuat proses ini lebih kuat dan efisien. Yuk, kita bahas! 🚀
Fungsi Custom Sederhana
Berikut adalah fungsi PHP sederhana yang menggantikan koma menjadi titik, lalu mengonversi string menjadi decimal:

Contoh Penggunaan:

Meskipun ini cukup untuk kasus sederhana, ada beberapa keterbatasan:
Mengasumsikan koma sebagai pemisah desimal, yang mungkin tidak sesuai untuk semua lokal.
Tidak menangani spasi atau pemisah lainnya seperti '1 234,56'
.
Tidak memvalidasi input.
Solusi Khusus Laravel: Menggunakan Mutator
Di Laravel, Anda dapat menggunakan mutator model untuk menangani konversi secara otomatis saat menyimpan data. Contohnya:

Penggunaan:
Pendekatan ini membuat logika lebih bersih dan dapat digunakan ulang, terutama untuk input dari form.

Menangani Perbedaan Lokal
Jika aplikasi Anda melayani pengguna dari berbagai negara, Anda mungkin perlu menangani format lokal yang berbeda. Misalnya:
Inggris (US): 1,234.56
Jerman (DE): 1.234,56
Untuk ini, Anda bisa menggunakan kelas NumberFormatter
dari ekstensi PHP intl
:

Contoh Penggunaan:

Menangani Kasus Edge
Saat bekerja dengan data dunia nyata, Anda mungkin menemukan:
String dengan spasi tambahan: " 1,234.56 "
Input tidak valid: "abc123"
Angka besar atau format khusus: "1e3"
Berikut adalah fungsi yang lebih aman untuk menangani berbagai skenario:

Contoh Penggunaan:

Kesimpulan
Mengubah string menjadi decimal mungkin terlihat sederhana, tetapi dapat menjadi rumit saat menangani berbagai format dan kasus edge. Laravel menyediakan alat yang kuat seperti mutator untuk menyederhanakan proses ini, dan dengan bantuan fungsi bawaan PHP, Anda bisa membuat kode Anda lebih peka terhadap lokal dan lebih kuat.