我有一个带有double的函数,并将其作为带有千位分隔符的字符串返回。你可以在这里看到它:c++: Format number with commas?
#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();
}
现在我希望能够将其格式化为带有美元符号的货币。具体来说,我希望获得一个字符串,如&#34; $ 20,500&#34;如果给出20500的双倍。
在负数的情况下,预先设置一个美元符号并不起作用,因为我需要&#34; - $ 5,000&#34;不是&#34; $ - 5,000&#34;。
答案 0 :(得分:4)
if(value < 0){
ss << "-$" << std::fixed << -value;
} else {
ss << "$" << std::fixed << value;
}
答案 1 :(得分:2)
我认为你唯一能做的就是
ss << (value < 0 ? "-" : "") << "$" << std::fixed << std::abs(value);
您需要使用千位分隔符打印特定的区域设置。
答案 2 :(得分:1)
以下是我用来了解从here提取的格式化货币的示例程序。尝试分开选择这个程序,看看你能用什么。
#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;
}