String.format(%X,num)仅适用于整数吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String.format(%X,num)仅适用于整数吗?相关的知识,希望对你有一定的参考价值。
我正在尝试将十进制数转换为六。
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
当我输入整数而不是双精度时,代码起作用。
我已经尝试过%X%f,%X,%f,它们也有错误。我发现其他人在String.format()中使用双数。我在String.format()中找不到arg的任何格式限制。 String.format()无法将十进制双精度数转换为六进制吗?
您想要的不清楚。您不能真正“以十六进制打印双精度”。
陈述示例输入和所需的输出种类。
示例1
输入:12.11
所需的输出:C.B
示例答案
这毫无意义。想象一下,输入为12.10
,那么您想要的输出为C.A
,除了12.10
与12.1
相同,因此C.A
没有意义。
示例2
输入:12.11
所需的输出:C.(something that makes sense here)
这里涉及一些棘手的数学。 .11是'1 1 / 10th + 1 1 / 100th'。十六进制的等效值为'? 1 / 16th +? 1 / 256th +? 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
我想在内存中使用该双精度值的位表示(根据IEEE754 spec)。
答案
System.out.printf("%X", Double.doubleToLongBits(numIn));
请注意,这看起来与十进制数字完全不同,请参阅Wikipedia页面,该页面说明了这些内容的存储方式(这很复杂)。
以上是关于String.format(%X,num)仅适用于整数吗?的主要内容,如果未能解决你的问题,请参考以下文章
Java 中的 String.format() 和十六进制数字
C# String.Format 等价于带有自定义格式化程序的 JS
swift - 仅适用于架构 x86_64 模拟器的重复符号
iPhone SDK 4 仅适用于 Mac OS X Snow Leopard?