向下舍入/截断双倍

时间:2015-12-24 03:25:21

标签: c++ double point floating

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

<up to 5 digits>.<two digits>

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

11.09 - (11.09 * 0.005) = 11.03455

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

我将我的程序生成的值与我在字符串格式的文本文件中的值进行比较。我只需要两个小数点的精度,我可以向下舍入。有没有办法让我把它减少到11.03?

我认为如果我把它变成一个字符串并且只是逐个字符地解析它是最简单的,只需要在&#39;之后添加两个字符。字符。这是一个好的解决方案吗?有更好的想法吗?

这就是我所拥有的:

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下公式来舍入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++?