Saya mencoba menemukan cara yang baik untuk mencetak 0 di awal, seperti 01001 untuk kode pos. Sementara nomor akan disimpan sebagai 1001, apa cara yang baik untuk melakukannya?
Saya berpikir untuk menggunakan salah satu pernyataan kasus / jika kemudian untuk mencari tahu berapa digit angka itu dan kemudian mengubahnya menjadi array char dengan 0 ekstra untuk dicetak tetapi saya tidak dapat membantu tetapi berpikir mungkin ada cara untuk melakukan ini dengan sintaks format printf yang mengelak dari saya.
Solusi yang benar adalah dengan menyimpan kode pos dalam database sebagai STRING. Terlepas dari kenyataan bahwa itu mungkin terlihat seperti angka, tidak. Ini kode, di mana setiap bagian memiliki makna.
Angka adalah hal yang Anda lakukan aritmatika. Kode pos bukan itu.
sumber
Anda menempatkan nol sebelum lebar bidang minimum:
sumber
Kode pos adalah bidang yang sangat dilokalkan, banyak negara memiliki karakter dalam kode pos mereka, misalnya, Inggris, Kanada. Karena itu dalam contoh ini Anda harus menggunakan bidang string / varchar untuk menyimpannya jika suatu saat Anda akan mengirim atau mendapatkan pengguna / pelanggan / klien / dll dari negara lain.
Namun dalam kasus umum Anda harus menggunakan jawaban yang disarankan (
printf("%05d", number);
).sumber
Jika Anda menggunakan Mesin * NIX:
Ini akan menampilkan halaman manual, mirip dengan:
Meskipun pertanyaannya adalah untuk C, halaman ini mungkin bisa membantu.
sumber
man
perintah, itu mempersempitnya ke bagian tertentu. Tanpanya, Anda akan mendapatkan halaman manual untuk perintah shellprintf
alih-alih fungsi C.Di sini, "05" mengatakan "gunakan 5 digit dengan angka nol di depan".
sumber
printf memungkinkan berbagai opsi pemformatan.
ex:
sumber
Anda akan menyelamatkan diri dari tumpukan masalah (jangka panjang) jika Anda menyimpan kode pos sebagai string karakter, yang artinya, bukan angka, yang bukan.
sumber
Lebih fleksibel .. Berikut adalah contoh mencetak deretan angka yang dibenarkan benar dengan lebar tetap, dan ruang-padding.
Fungsi dan makro dirancang agar printfs lebih mudah dibaca.
sumber
#define FMT(x) (getFmt(8,x).c_str())
(perhatikan parameter x !), Yang bertentangan dengan variabel (yang merupakan kode Anda).Jika Anda perlu menyimpan kode pos dalam kode pos array karakter [], Anda dapat menggunakan ini:
sumber