我有一个问题,我需要使用基本的C ++输出系统(例如iostream或sstream)打印一些双值,并且这个值以某种方式被截断了很多。 例如:
double a = 283752.24234;
std::cout << 283752.24234 << std::endl;
std::cout << a << std::endl;
两个输出都是283752
为什么会发生这种情况,我该怎么做才能获得任何双值的完整输出?
答案 0 :(得分:2)
为什么会发生这种情况......
那是因为default precision是6,因此只有最前面的6位数字被渲染283752
。
...我该怎么做才能获得任何双值的完整输出?
第一个选项是使用std::setprecision()
I / O操纵器使用更大的precision
值:
#include <iostream>
#include <iomanip>
int main(){
double a = 283752.24234;
std::cout << std::setprecision(12) << 283752.24234 << std::endl;
std::cout << std::setprecision(12) << a << std::endl;
}
请参阅Live Demo
第二个选项是使用std::fixed
I / O操纵器显示小数点后的值:
#include <iostream>
#include <iomanip>
int main(){
double a = 283752.24234;
std::cout << std::fixed << 283752.24234 << std::endl;
std::cout << std::fixed << a << std::endl;
}
请参阅Live Demo
输出:
283752.242340
283752.242340