3

double を受け取り、それを 1000 区切りの文字列として返す関数があります。ここで確認できます: c++: 数値をコンマでフォーマットしますか?

#include <iomanip>
#include <locale>

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

今、ドル記号で通貨としてフォーマットできるようにしたいと考えています。具体的には、20500 の倍数が与えられた場合、「$20,500」などの文字列を取得したいと考えています。

「$-5,000」ではなく「-$5,000」が必要なため、負の数の場合は先頭にドル記号を付けても機能しません。

4

3 に答える 3

5
if(value < 0){
   ss << "-$" << std::fixed << -value; 
} else {
   ss << "$" << std::fixed << value; 
}
于 2012-12-04T23:48:59.867 に答える
3

私はあなたがそこでできる唯一のことは

ss << (value < 0 ? "-" : "") << "$" << std::fixed << std::abs(value);

千の区切り記号で印刷するには、特定のロケールが必要です。

于 2012-12-04T23:48:07.343 に答える
1

これは、ここから取得した通貨のフォーマットについて学習するために使用したプログラムの例です。このプログラムをバラバラにして、何が使えるか見てみましょう。

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

void showCurrency(double dv, int width = 14)
{
    const string radix = ".";
    const string thousands = ",";
    const string unit = "$";
    unsigned long v = (unsigned long) ((dv * 100.0) + .5);
    string fmt,digit;
    int i = -2;
    do {
        if(i == 0) {
            fmt = radix + fmt;
        }
        if((i > 0) && (!(i % 3))) {
            fmt = thousands + fmt;
        }
        digit = (v % 10) + '0';
        fmt = digit + fmt;
        v /= 10;
        i++;
    }
    while((v) || (i < 1));
    cout << unit << setw(width) << fmt.c_str() << endl;
}

int main()
{
    double x = 12345678.90;
    while(x > .001) {
        showCurrency(x);
        x /= 10.0;
    }
    return 0;
}
于 2012-12-04T23:49:39.743 に答える