显式类型转换float(intvar)导致int

时间:2015-06-19 07:09:18

标签: c++ floating-point cout

我尝试了以下代码:

#include <iostream>
#include<conio.h>
using namespace std;
int main()
{
    int intvar = 25;
    float floatvar = 35.87;
    cout << "intvar= " << intvar;
    cout << "\n floatvar =" << floatvar;
    cout << "\n float(intvar)=" << float(intvar);
    cout << "\n int(floatvar)=" << int(floatvar);
    _getch();
    return 0;
}

float(intvar)的结果将显示为25 有人可以解释为什么它仍然显示为整数而不是25.000000

2 个答案:

答案 0 :(得分:3)

该值不是整数,只是std::cout会尝试在此处为您提供紧凑的表示。使用setfixedsetprecision(来自#include <iomanip>)强制浮点数的特定输出精度。在第一个cout行之前添加此内容:

cout << fixed << setprecision(6);

答案 1 :(得分:0)

您需要指定floatingPoint输出的格式,例如:

cout << "\n float(intvar)=" << std::fixed << float(intvar);

From [The.C ++ .Programming.Language.Special.Edition] 21.4.3 FloatingPoint输出[io.out.float]:

  

浮点输出由格式和精度控制:

     

-   通用格式允许实现选择呈现的格式   最好保留空间价值的风格的价值   可用。精度指定最大位数。它   对应于printf()的%g(§21.8)。

     

- 科学的格式呈现   小数点前一位数和指数的值。该   precision指定小数点后的最大位数   点。它对应于printf()的%e。

     

- 固定格式呈现一个   值作为整数部分后跟小数点和小数   部分。精度指定了之后的最大位数   小数点。它对应于printf()的%f。