C++ 向下舍入/截断双精度

C++ 向下舍入/截断双精度,c++,double,point,floating,C++,Double,Point,Floating,我使用如下格式的财务数据进行计算: <up to 5 digits>.<two digits> 我希望能够使用11.03455而不是生成的内容:11.034549999999 我将程序生成的值与字符串格式的文本文件中的值进行比较。我只需要两个小数点的精度,就可以四舍五入了。有没有办法把这个减到11点03分 我在想,如果我把它转换成一个字符串,然后一个字符一个字符地解析它,只在“.”字符后面加上两个字符,这将是最简单的。这是一个好的解决方案吗?还有更好的主意吗 以下是我所

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

<up to 5 digits>.<two digits>
我希望能够使用
11.03455
而不是生成的内容:11.034549999999

我将程序生成的值与字符串格式的文本文件中的值进行比较。我只需要两个小数点的精度,就可以四舍五入了。有没有办法把这个减到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);
}
string数据处理器::createTwoDec(双倍价格){
字符串s=到_字符串(价格);
字符串输出=”;
int-dist=0;
int num_=0;
bool pt_found=false;
对于(int i=0;i3)
打破
输出+=s[i];
num_++;
}
返回output.substr(0,需要的数量);
}

您可以使用以下公式将小数点后n位四舍五入(n不太大):

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

 result = round(result*100000)/100000;

参见

可能
四舍五入(值*100.0)/100.0?我正在使用金融数据进行计算——我希望您了解浮点计算的不精确性,以及为什么
double
可能不适合表示货币价值和计算。让我试试,然后再与您联系。
round(x*10^n)/10^n
 where n is number of decimal places required.
 result = round(result*100000)/100000;