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

根据输入的 double 参数或字符串参数生成一个 Double 对象

定义

public static Double valueOf(double d) //自 1.5 出现

public static Double valueOf(String s) throws NumberFormatException

参数

参数类型参数名称参数描述
doubled要解析的 double 数
Strings要解析的字符串

返回值

返回一个根据输入的 double 参数或字符串参数生成的 Double 对象.

抛出的异常

NumberFormatException 如果字符串参数不包含可解析的数字

NullPointerException 如果字符串参数为 null

说明

对于 String 参数的方法 valueOf(String s)

参数 s 中的前置和尾随空白字符都会被忽略. 就像通过 String.trim() 方法删除空格一样; 也就是说, ASCII 空格和控制字符都被删除了. s 的剩余部分应构成一个 FloatValue, 如词法语法规则所述:

  • 浮点值类:
    • (符号可选) NaN
    • (符号可选) Infinity
    • (符号可选) 浮点字面量
    • (符号可选) 十六进制浮点字面量
    • 有符号整数
  • 十六进制浮点字面量
    • 十六进制有效位的二进制指数可选的浮点类型后缀
  • 十六进制有效数
    • 十六进制数
    • 十六进制数 .
    • 0x 十六进制可选位 . 十六进制数
    • 0X 十六进制可选位 . 十六进制数
  • 二进制指数
    • 二进制指数指标 有符号整数
  • 二进制指数指示器
    • p
    • P

其中 符号浮点字面量十六进制数十六进制位无符号整数浮点类型后缀 与 Java™ 语言规范的词法结构部分中的定义相同, 但数字之间不接受下划线. 如果 s 不具有 浮点值 的形式, 则抛出 NumberFormatException. 否则, s 会被视为代表通常的“计算机科学记数法”中的精确十进制值或精确的十六进制值; 然后, 这个精确的数值在概念上被转换为 "无限精确" 的二进制值, 然后通过 IEEE 754 浮点算术的通常舍入到最近的规则将其舍入为 double 类型, 其中包括保留零值的符号. 请注意, 四舍五入规则也意味着溢出和下溢行为; 如果 s 的确切值在幅度上足够大(大于或等于 (MAX_VALUE + ulp(MAX_VALUE)/2), 则四舍五入将产生一个 Infinity; 如果 s 的确切值在幅度上足够小(小于小于或等于 MIN_VALUE/2), 四舍五入到浮点数将产生结果零. 最后, 在四舍五入后返回一个表示该双精度值的 Double 对象.

要解析浮点值的本地化字符串表示, 请使用 NumberFormat 的子类.

对于 double 参数的方法 valueOf(double s)

注意事项

字符串 s 参数, 尾随格式说明符、确定浮点文字类型的说明符(1.0f 是浮点值; 1.0d 是双精度值)不会影响此方法的结果. 也就是说, 输入字符串的数值直接转换为目标浮点类型. 两步转换序列, 即字符串到浮点数, 然后是浮点数到双精度数, 这并不等同于将字符串直接转换为双精度数. 例如, 浮点文字 0.1f 等于双精度值 0.10000000149011612; float 字面值 0.1f 表示与 double 字面值 0.1 不同的数值. (数值 0.1 不能用二进制浮点数精确表示.)

示例

使用 Double.valueOf() 解析出一个 Double 的示例

package com.yi21.Double;

public class Yi21DoubleValueOf {

    public static void main(String[] args) {
        
        double d = 21.0;
        System.out.println(Double.valueOf(d));

        String  s = "21.0";
        parseStringToDouble(s);

        s = "NaN";
        parseStringToDouble(s);

        s = "223.4f";
        parseStringToDouble(s);

        s = "  223.4f";
        parseStringToDouble(s);

        s = " 0x10002.2p2";
        parseStringToDouble(s);

        s = "0X10002.2p2\t";
        parseStringToDouble(s);

    }

    private static void parseStringToDouble(String s) {
        try {
            System.out.println(s + "解析出的结果为: " + Double.valueOf(s));
        } catch (Exception e) {
            System.out.println("解析出错:" + s + "(" + e.getClass() + ")");
        }
    }

}

执行结果为 :

21.0
21.0解析出的结果为: 21.0
NaN解析出的结果为: NaN
223.4f解析出的结果为: 223.4
  223.4f解析出的结果为: 223.4
 0x10002.2p2解析出的结果为: 262152.5
0X10002.2p2     解析出的结果为: 262152.5