提问人:Quang huynh 提问时间:4/14/2023 最后编辑:Remy LebeauQuang huynh 更新时间:4/14/2023 访问量:49
删除数字 demical 并转换为十六进制
Remove number demical and turn into hexadecimal
问:
#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;
}
这是我无法解决的问题:
我想将数字转换为十六进制数(包括前缀)并删除其小数。
A
0x
例如:A = 1345.6454 => 我只取 1345 并删除 6454。
在上面代码的输出中,数字显示一个符号,我想删除它。
C
+
有人知道如何解决这些问题吗?
答:
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:
+
:签名转换的符号始终在转换结果的前面(默认情况下,只有当结果为负数时,结果前面才加上减号)
您在打印时已启用,但在打印时仍处于启用状态。showpos
B
C
您可以使用 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::setw
std::internal
A
operator<<
std::internal
operator<<
std::internal
std::right
评论
cout << setiosflags(ios::uppercase)
cout << uppercase