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;