You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:52:58