四舍五入 down/truncating 双

Rounding down/truncating double

我正在使用格式如下的财务数据进行计算:

<up to 5 digits>.<two digits>

基本上,在我的程序中我遇到了一个浮点错误。例如,如果我有:

11.09 - (11.09 * 0.005) = 11.03455

我希望能够使用 11.03455 而不是生成的内容:11.0345499999999...

我正在比较我的程序生成的值与我在字符串格式的文本文件中的值。我只需要两个小数点的精度,我可以四舍五入。有什么办法可以将其削减到 11.03?

我认为最简单的方法是将其转换为字符串并逐个字符地解析它,只在“.”之后添加两个字符。特点。这是一个好的解决方案吗?有更好的想法吗?

这是我的:

string dataProcessor::createTwoDec(double price){
    string s = to_string(price);
    string output = "";
    int dist = 0;
    int num_wanted = 0;

    bool pt_found = false;
    for(int i = 0; i < s.length(); i++){
        if(s[i] == '.')
            pt_found = true;
        if(pt_found)
            dist++;
        if(dist > 3)
            break;
        output += s[i];
        num_wanted++;

    }
    return output.substr(0, num_wanted);
}

可以用下面的公式四舍五入小数点后n位(n不要太大):

round(x*10^n)/10^n
 where n is number of decimal places required.

在你的例子中,n 是 5。因此,它将是

 result = round(result*100000)/100000;

How do you round off decimal places in C++?