铸造C++时出现问题

Trouble with casting C++

本文关键字:问题 C++ 铸造      更新时间:2023-10-16

我在铸造方面有问题;我有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。

cout设置为使用固定符号后,可以使用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;
}

输出(stdout):

1.0

您可以为浮点类型的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;
}

对我来说,将int转换为double毫无意义,因为一旦根据int写入分数数据,分数数据就会丢失。此外,正如@Borglider所说,我猜后面的零隐藏在C++中。

但是,您可以使用代码中显示的相同方法将floatdouble转换为int,或将int转换为char,反之亦然。

  • floatdoubleint的情况下,分数数据将丢失
    即CCD_ 16将变为CCD_
  • charint的情况下,结果值将是该字符的ASCII值
    A将变为650变为48并且在反之亦然的情况下97将变为a

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

如果未明确指定浮点格式模式,则不会保留尾随零。如果您使用科学模式或固定模式,它将被保留。你可以试着像一样得到零

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

IDEONE演示

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

std::string str = std::to_string (double(f));

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

str.erase (str.find_last_not_of('0') + 1, std::string::npos);

一个问题是,例如,如果您有"1.0",它将产生"1."