在C ++中输出为货币

时间:2015-10-31 17:21:09

标签: c++ currency precision

我有一个简单的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 ++中使用。

任何帮助表示感谢。

1 个答案:

答案 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,则需要进行一些更改:

  • 找到点'.'字符的位置。
  • 如果点在那里,并且后面的字符数小于2,请继续添加零"0",直到点'.'是后面的第三个字符
  • 如果有点,并且后面有两个以上的字符,请删除字符串的尾部,使点后面只有两个字符
  • 如果没有点,请将".00"附加到字符串

您插入点的算法的其余部分将正常工作。