以下是我正在使用的一些简单代码:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float f = 1.66f;
int d = (int)f;
double g = (double)d;
cout.precision(6);
cout<<g<<"\n";
}
我希望它打印1.000000
,但它只打印1
。但是,即使将int升级为double,也不会自动将其转换为整数值?
答案 0 :(得分:7)
您可以添加cout << std::fixed;
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float f = 1.66f;
int d = (int)f;
double g = (double)d;
cout.precision(6);
cout << std::fixed;
cout<<g<<"\n";
}
你得到1.000000
说明(编辑)
使用std::fixed时:
当floatfield设置为fixed时,将写入浮点值 使用定点表示法:值完全表示为 由精度字段指定的小数部分中的多个数字 (精度),没有指数部分。
当您使用std::defaultfloat(您正在使用的那个)时:
当floatfield设置为defaultfloat时,浮点值为 使用默认表示法编写:表示使用尽可能多的表示法 根据需要有意义的数字直到流的小数精度 (精度),计算小数点前后的数字 点(如果有的话)。
这就是为什么以下.000000
被认为是无效的!
(如果你有1.00001
它就会被打印出来)
答案 1 :(得分:1)
Setprecision设置结果的精确程度,例如
std::cout << (1.f)/6 << std::endl; // prints 0.166667
std::cout.precision(7);
std::cout << (1.f)/6 << std::endl; // prints 0.1666667
但它并不要求打印出0,请考虑:
std::cout.precision(5);
std::cout << 1.1110f << std::endl; // prints 1.111
std::cout << 1.1111f << std::endl; // prints 1.1111
正如投币币建议打印出来的解决方案是使用std :: fixed!