铸造C++时出现问题
Trouble with casting 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。
将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++
中。
但是,您可以使用代码中显示的相同方法将float
或double
转换为int
,或将int
转换为char
,反之亦然。
- 在
float
或double
到int
的情况下,分数数据将丢失
即CCD_ 16将变为CCD_ - 在
char
到int
的情况下,结果值将是该字符的ASCII值
即A
将变为65
、0
变为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."
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题