我在计算浮点数时得到了错误的答案。
float total =1;
for(int i= 0; i<16;i++){
total = total * floats_array[i];
if(i!=15)
cout << floats_array[i] << " * ";
else
cout << floats_array[i] << " = ";
}
cout << total << "\n";
我需要3个数字才能指向。
任何建议?
答案 0 :(得分:2)
您是否尝试打印最多三位小数?
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
vector< float > floats_array( 16, 1.123 );
float total = 1;
for(int i = 0; i<16;i++) {
total = total * floats_array[i];
}
float rounded_total = std::floor( total * 1000 ) / 1000;
cout << "total = " << total << endl;
cout << "total (rounded) = " << rounded_total << endl;
return 0;
}
其output为total = 6.398
(而不是total = 6.39847
)。
答案 1 :(得分:1)
默认情况下,浮点值的格式最多为六位有效小数。有操纵者可以改变这一点;得到三位小数,你想要
#include <iomanip>
std::cout << std::fixed << std::setprecision(3) << total;
对我来说,这会打印362955.656
,你会注意到它仍然是不精确的:典型的32位float
只能提供六位或七位小数的精度。使用double
可获得更高的精确度;这给了我362955.533
,正确到至少三位小数。
答案 2 :(得分:0)
从截图中看,您打印的值看起来像是从float转换为int,因为它正在向上舍入。我会检查您的阵列类型以及您的打印方式。如果没有更多代码,就无法获得更多细节。提供更好的MVCE以获得社区的更好答案。
您可以尝试使用类似
的内容覆盖coutcout.precision(15);
cout << float_array[i];
cout << total;
这会将cout精度设置为15个位置。您可以将此数字更改为您想要的任何数字。