Java Double.toHexString() 方法及代码示例

获取 Double 的十六进制字符串表示.

初见版本

1.5

定义

public static String toHexString(double d)

参数

参数类型参数名称参数描述
doubled要转换的参数

返回值

返回表示当前参数的十六进制的字符串

说明

以下提到的所有字符都是 ASCII 字符:

  • 若参数为 NaN, 则结果字符串也为 "NaN".
  • 否则,结果是表示参数的符号和大小的一个字符串. 如果符号为负,则结果的第一个字符为 '-' ('\u002D'); 如果符号为正, 则结果中不会出现表示符号的字符. 至于大小 m 有如下表示:
    • 如果 m 是无穷的, 那么他的字符串表示为 "Infinity", 因此基于符号的表示如下: 正无穷产生结果 "Infinity", 负无穷产生结果 "-Infinity".
    • 如果 m 为 0, 那么他的字符串表示为 "0x0.0p0", 因此基于符号的表示如下: 正 0 产生结果 "0x0.0p0", 负 0 生结果 "-0x0.0p0".
    • 如果 m 是具有正规表示的双精度值, 则使用子字符串来表示有效数字和指数字段. 有效数字由字符 "0x1"表示. 后跟小写的十六进制表示的有效数字的其余部分作为分数. 除非所有数字都为零, 否则十六进制表示中的尾随零被删除, 在这种情况下使用单个零. 接下来, 指数由 "p" 表示, 后跟无偏指数的十进制字符串, 这就如通过对指数值调用 Integer.toString() 的结果一样.
    • 如果 m 是具有次正规表示的双精度值, 则有效数字由字符"0x0"表示. 后跟以分数表示的其余有效数字的十六进制表示. 十六进制表示中的尾随零被删除. 接下来, 指数由"p-1022"表示. 请注意, 次正规有效数中必须至少有一个非零数字.

示例

使用 Double.toHexString() 生成 Double 的十六进制字符串的示例

package com.yi21.Double;

public class Yi21DoubleToHexString {

    public static void main(String[] args) {
        showHex(Double.NaN);
        showHex(Double.POSITIVE_INFINITY);
        showHex(Double.NEGATIVE_INFINITY);
        showHex(0.0);
        showHex(-0.0);
        showHex(21.0);
        showHex(-21.0);
        showHex(6283.34);
        showHex(-231.34);
    }

    private static void showHex(double d) {
        System.out.println(d + " 的十六进制表示: " + Double.toHexString(d));;
    }

}

执行结果为 :

NaN 的十六进制表示: NaN
Infinity 的十六进制表示: Infinity
-Infinity 的十六进制表示: -Infinity
0.0 的十六进制表示: 0x0.0p0
-0.0 的十六进制表示: -0x0.0p0
21.0 的十六进制表示: 0x1.5p4
-21.0 的十六进制表示: -0x1.5p4
6283.34 的十六进制表示: 0x1.88b570a3d70a4p12
-231.34 的十六进制表示: -0x1.ceae147ae147bp7