c++:如何使用美元符号将双精度格式化为货币

c++: How do I format a double to currency with dollar sign?

本文关键字:双精度 格式化 货币 符号 何使用 美元 c++      更新时间:2023-10-16

我有一个函数,它接受一个双精度并将其作为带有千位分隔符的字符串返回。你可以在这里看到它: 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();
}

现在我希望能够将其格式化为带有美元符号的货币。 具体来说,如果给定 20,500 的双倍,我想得到一个字符串,例如"$20500"。

在负数的情况下,前面加上美元符号不起作用,因为我需要"-$5,000"而不是"$-5,000"。

if(value < 0){
   ss << "-$" << std::fixed << -value; 
} else {
   ss << "$" << std::fixed << value; 
}

我认为你唯一能做的是

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

您需要特定的区域设置才能使用千位分隔符进行打印。

这是我用来学习格式化从这里提取的货币的示例程序。尝试将该程序分开,看看您可以使用什么。

#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;
}