编译C ++有问题

时间:2016-07-29 13:45:15

标签: c++

我有铸造问题;我有Java的经验,可以很容易地进行投射和打印:

int a = 1;
System.out.println((double)a);

并且上面的代码将打印1.0。

在C ++中,这种方法不起作用,我不明白为什么。

#include <iostream>
using namespace std;
int main(){
    int a = 1;
    cout << (double)a;
    return 0;
}

问题是,这里我的输出是1而不是1.0,就像我期望的那样。

5 个答案:

答案 0 :(得分:4)

cout设置为使用fixed表示法后,您可以使用setprecision函数设置cout对象的精度。

#include <iostream>
#include <iomanip> 
using namespace std;

int main(){
    int a = 1;
    cout << fixed            // setting notation
         << setprecision(1)  // setting precision
         << (double)a;       // print data
    return 0;
}

输出(标准输出):

1.0

答案 1 :(得分:1)

您可以为浮点类型的cout输出指定精度和固定值。放:

cout << fixed << setprecision(2);
打印双打之前

完全正常的例子:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
   int a = 1;
   cout << fixed << setprecision(2);
   cout << (double)a << endl;
   return 0;
}

答案 2 :(得分:1)

对我而言,将int转换为double是没有意义的,因为一旦您针对int编写分数数据,它就会丢失。此外,如@Borgleader所述,我想尾随的零隐藏在C++中。

但是,您可以使用您在自己展示的相同方法将floatdouble转换为intint转换为char,反之亦然代码。

  • 如果是floatdoubleint,则小数数据将丢失
    1.234将成为1
  • 如果charint,结果值将是该字符的ASCII值 即A将成为650成为48,反之亦然[{1}}成为97

希望这个答案对你有所帮助。

答案 3 :(得分:0)

如果明确指定浮点格式化模式,则不保留尾随零。如果您使用科学模式或固定模式,它将被保留。您可以尝试获取

之类的零
 int a = 1;

  std::cout << std::fixed;
  std::cout << std::setprecision(1);
  std::cout << (double)a << "\n";

IDEONE DEMO

答案 4 :(得分:-1)

如果您使用的是C ++ 11或更高版本,可以将其转换为字符串

    SELECT AdmissionReason FROM Episode

不幸的是,这不会让您控制格式,并会产生不必要的尾随零。你可以通过这样做摆脱这些:

   SELECT COUNT(AdmissionReason) FROM Episode
   WHERE AdmissionReason IS NULL;

一个问题是,如果你有“1.0”,那么它将产生“1”。