删除数字 demical 并转换为十六进制

Remove number demical and turn into hexadecimal

提问人:Quang huynh 提问时间:4/14/2023 最后编辑:Remy LebeauQuang huynh 更新时间:4/14/2023 访问量:49

问:

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

int main() {
    int T; cin >> T;
    cout << setiosflags(ios::uppercase);
    cout << setw(0xf) << internal;
    while (T--) {
        double A; cin >> A;
        double B; cin >> B;
        double C; cin >> C;

        cout << fixed << setprecision(0) << hex << showbase << A << '\n';
        cout << fixed << setprecision(2) << showpos << right << setfill('_') << setw(15) << B << '\n';
        cout << fixed << setprecision(9) << scientific << C;

    }
    return 0;

}

这是我无法解决的问题:

  • 我想将数字转换为十六进制数(包括前缀)并删除其小数。A0x

    例如:A = 1345.6454 => 我只取 1345 并删除 6454。

  • 在上面代码的输出中,数字显示一个符号,我想删除它。C+

有人知道如何解决这些问题吗?

C++ 爱马尼普

评论

1赞 Remy Lebeau 4/14/2023
附带说明:可以简化为 .cout << setiosflags(ios::uppercase)cout << uppercase

答:

1赞 Remy Lebeau 4/14/2023 #1

https://en.cppreference.com/w/cpp/io/manip/fixed

十六进制浮点格式会忽略 std::num_put::d o_put 规范所要求的流精度规范。

要截断浮点数的小数点,请将该值强制转换为整数,例如:

cout << hex << showbase << static_cast<int>(A) << '\n';

https://en.cppreference.com/w/cpp/locale/num_put/put

对于整数和浮点类型,如果设置了修饰符showpos+

https://en.cppreference.com/w/cpp/io/c/fprintf

+:签名转换的符号始终在转换结果的前面(默认情况下,只有当结果为负数时,结果前面才加上减号)

您在打印时已启用,但在打印时仍处于启用状态。showposBC

您可以使用 std::resetiosflags(std::ios::showpos)std::noshowpos 来禁用:showpos

cout << resetiosflags(ios::showpos) << fixed << setprecision(9) << scientific << C;
cout << noshowpos << fixed << setprecision(9) << scientific << C;

评论

0赞 Quang huynh 4/14/2023
但是在输出中,数字 A 是这样的:0x[空格]64。
0赞 Quang huynh 4/14/2023
我想删除这个空格。你可以帮我吗?
0赞 Remy Lebeau 4/15/2023
@Quanghuynh 您正在使用和打印之前。空格是填充指定宽度的填充。默认情况下,将 print 作为填充左侧的前缀。然后,十六进制值将打印到填充的右侧。删除或添加以将前缀移动到右侧。我建议您阅读 std::num_put::p ut 了解 I/O 操纵器影响输出的各种方式。std::setwstd::internalAoperator<<std::internaloperator<<std::internalstd::right