我有一个简单的C ++命令行程序,我从用户那里获取输入,然后将其显示为价格,带有货币符号,逗号分隔每组3个值,小数点和两个小数位显示即使它们为零。
我想要实现的例子:
100 => £100.00
101.1 => £101.10
100000 => £100,000.00
到目前为止,这是我的方法:
void output_price() {
int price;
cout << "Enter a price" << endl;
cin >> price;
string num_with_commas = to_string(price);
int insert_position = num_with_commas.length() - 3;
while (insert_position > 0) {
num_with_commas.insert(insert_position, ",");
insert_position -= 3;
}
cout << "The Price is: £" << num_with_commas << endl;
}
这部分有效,但没有显示小数点/位置。
1000 => £1000
如果我将价格改为浮动或双倍,它就会给我这个:
1000 => £10,00.,000,000
我试图保持简单并避免创建货币类,但不确定这是否可以在C ++中使用。
任何帮助表示感谢。
答案 0 :(得分:1)
逻辑错误在于:
int insert_position = num_with_commas.length() - 3;
num_with_commas
的原始值在点后可以有任意数字,包括根本没有点;而且,你无法控制它,因为the format applied by std::to_string
is fixed。
如果您想继续使用std::to_string
,则需要进行一些更改:
'.'
字符的位置。"0"
,直到点'.'
是后面的第三个字符".00"
附加到字符串您插入点的算法的其余部分将正常工作。