Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh memformat nombor dengan koma dalam C menggunakan std::locale dan std::stringstream?

Bagaimanakah saya boleh memformat nombor dengan koma dalam C menggunakan std::locale dan std::stringstream?

Barbara Streisand
Barbara Streisandasal
2024-10-29 18:13:03311semak imbas

How can I format numbers with commas in C   using std::locale and std::stringstream?

Formatkan Nombor dengan Koma dalam C : Penyelesaian Komprehensif

Dalam C , memformat nombor dengan koma ialah tugas biasa yang meningkatkan kebolehbacaan dan kejelasan nilai angka. Artikel ini membentangkan kaedah yang mantap untuk mencapainya menggunakan gabungan std::locale dan std::stringstream.

Penyelesaian

Inti penyelesaian kami terletak pada memanfaatkan std::locale untuk mewujudkan konteks pemformatan setempat dan std::stringstream untuk menangkap hasil yang diformatkan. Kaedah templat FormatWithCommas, yang mengambil jenis angka generik T, mengikut langkah berikut:

  1. Buat objek std::stringstream bernama ss.
  2. Tetapkan tempat untuk ss dengan memanggil imbue (std::locale("")). Ini akan menggunakan tempat sistem lalai, yang biasanya menyediakan peraturan pemformatan nombor yang sesuai dengan tempat.
  3. Masukkan nilai nilai angka ke dalam ss menggunakan operator<< dan tentukan ketepatan tetap menggunakan std::fixed.
  4. Kembalikan perwakilan rentetan nilai yang diformatkan dengan memanggil str() pada ss.

Berikut ialah kod lengkap untuk kaedah FormatWithCommas :

<code class="cpp">template<class T>
std::string FormatWithCommas(T value)
{
    std::stringstream ss;
    ss.imbue(std::locale(""));
    ss << std::fixed << value;
    return ss.str();
}

Contoh Penggunaan

Menggunakan kaedah kami adalah mudah. Contohnya:

<code class="cpp">std::string result1 = FormatWithCommas(7800);
std::string result2 = FormatWithCommas(5100100);
std::string result3 = FormatWithCommas(201234567890);
// Outputs:
// result1 = "7,800"
// result2 = "5,100,100"
// result3 = "201,234,567,890"

Mengendalikan Beregu

Kaedah yang disediakan boleh diubah suai dengan mudah untuk mengendalikan beregu juga. Hanya gantikan T dengan dua kali ganda dalam pengisytiharan templat:

template<>
std::string FormatWithCommas(double value)
{
    std::stringstream ss;
    ss.imbue(std::locale(""));
    ss << std::fixed << value;
    return ss.str();
}

Pertimbangan Mudah Alih

Perlu diperhatikan bahawa penggunaan "" untuk menentukan tempat mungkin tidak sepenuhnya mudah alih merentasi sistem yang berbeza. Untuk memastikan tingkah laku yang konsisten, pertimbangkan untuk menyatakan secara eksplisit tempat yang dikehendaki.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memformat nombor dengan koma dalam C menggunakan std::locale dan std::stringstream?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn