C++编程求助:浮点数去小数转十六进制及消除科学计数法正号
问题解决方案
修改后的完整代码:
#include <iostream> #include <iomanip> using namespace std; int main() { int T; cin >> T; cout << setiosflags(ios::uppercase); while (T--) { double A; cin >> A; double B; cin >> B; double C; cin >> C; // 处理A:取整数部分转带0x前缀的十六进制 cout << hex << showbase << uppercase << static_cast<long long>(A) << '\n'; // 处理B:保持原有格式 cout << fixed << setprecision(2) << showpos << right << setfill('_') << setw(15) << B << '\n'; // 处理C:关闭正号显示,按科学计数法输出9位小数 cout << noshowpos << fixed << setprecision(9) << scientific << C << '\n'; } return 0; }
问题1:去除A的小数部分并转十六进制
直接对double类型的A使用hex格式化会输出浮点数的十六进制表示(而非整数部分的十六进制),正确做法是:
- 用
static_cast<long long>(A)将A强制转换为整数类型,自动截断小数部分 - 配合
hex(十六进制)、showbase(显示0x前缀)、uppercase(大写字母)格式化输出即可
问题2:移除C的正号
showpos是流持久化状态,一旦设置会影响后续所有输出。解决方法是在输出C前添加noshowpos,关闭正号显示功能,这样科学计数法的正数就不会再带+号。
内容的提问来源于stack exchange,提问作者Quang huynh
相关产品推荐
相关产品推荐

