gpt4 book ai didi

java - String.format(%X, num) 仅适用于整数吗?

转载 作者:行者123 更新时间:2023-12-01 16:47:58 27 4
gpt4 key购买 nike

我正在尝试将十进制数转换为十六进制数。

    public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double num_in = sc.nextDouble();
System.out.print(String.format("%X", num_in));
}

运行此命令后,我收到以下错误消息。

Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.Double

当我输入整数而不是 double 时,代码可以工作。

我已经尝试过%X%f、%X、%f,但这些也有错误。我发现其他人在 String.format() 中使用双数字。我在 String.format() 中找不到 arg 的任何格式限制。 String.format() 无法将十进制双数转换为十六进制吗?

最佳答案

你想要什么不清楚。你不能真正“打印十六进制的 double ”。

说明示例输入和您想要的输出类型。

示例 1

输入:12.11所需输出:C.B

示例答案

这毫无意义。假设输入是 12.10,因此您所需的输出将是 C.A,但 12.1012.1 相同,因此 C.A 没有任何意义。

示例 2

输入:12.11所需的输出:C.(这里有意义的东西)

这里涉及到一些棘手的数学问题。 .11 是“1 1/10 + 1 1/100”。十六进制的等价物是 '? 1/16+? 1/256+? 1/4096th'等等。将 .11 转换为无限展开,1 除以 3 的方式永远不会结束(永远是 0.33333333)。你看,10 不能被 16 整除。

示例 3

输入:12.11所需输出:C.11

回答

这很奇怪,但如果你想要的话,好吧。显然,鉴于它是任意且无意义的,因此没有一种格式信函可以做到这一点。将整数部分和小数部分分开并分别打印(每个部分都有自己的字母)。像这样的东西:

long integral = (long) numIn;
double fractional = numIn - integral; // for large numbers this fails, take care.
String fracString = String.format("%.4f", fractional).substring(1); // lop off the 0.
return String.format("%X", integral) + fracString;

注意:一般来说,十六进制分数并不是什么东西。

示例 4

我想要内存中该 double 值的位表示(根据 IEEE754 spec )。

回答

System.out.printf("%X", Double.doubleToLongBits(numIn));

请注意,这看起来与十进制数字完全不同,请参阅维基百科页面,该页面解释了如何存储这些内容(这很复杂)。

关于java - String.format(%X, num) 仅适用于整数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61741608/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com