打印时缺少小数

时间:2015-07-05 21:49:56

标签: c++

以下是我正在使用的一些简单代码:

#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,也不会自动将其转换为整数值?

2 个答案:

答案 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!