双精度数字类 Double 与其他类型转换

在Java中,Double类提供了多种方法来转换Double对象为其他数值类型,以及将字符串解析为double值。

byteValue()方法 获取byte值

以byte形式返回此Double的值(通过强制转换为byte)。

✍方法声明

public byte byteValue();

  • 🪐返回值:转换为byte类型的由此对象所表示的double值。
    public static void main(String[] args) {
        Double d = Double.valueOf("12.0");
        byte b = d.byteValue();
        Double d1 = Double.valueOf("3.14");
        byte b1 = d1.byteValue();
        Double d2 = Double.valueOf("6.99");
        byte b2 = d2.byteValue();
        Double d3 = Double.valueOf("1234");
        byte b3 = d3.byteValue();
        System.out.println(d + " byte value " + b);
        System.out.println(d1 + " byte value " + b1);
        System.out.println(d2 + " byte value " + b2);
        System.out.println(d3 + " byte value " + b3);
    }

转换只看整数部分,小数部分忽略,如果超过 byte 的取值范围则返回数据会被截断或饱和。

12.0 byte value 12
3.14 byte value 3
6.99 byte value 6
1234.0 byte value -46

intValue()方法 将此Double值以int形式返回

将此Double值以int形式返回(强制转换为int类型)。

✍方法声明

public int intValue();

  • 🪐返回值:转换为int类型的由此对象所表示的double值。

下面代码创建Double对象d,并通过Double类的int Value()方法将对象d的参数强制转换为int型。

    public static void main(String[] args) {
        Double d = Double.valueOf("-12.0");
        int b = d.intValue();
        Double d1 = Double.valueOf("3.14");
        int b1 = d1.intValue();
        Double d2 = Double.valueOf("6.99");
        int b2 = d2.intValue();
        Double d3 = Double.valueOf(Double.MAX_VALUE);
        int b3 = d3.intValue();
        System.out.println(d + " int value " + b);
        System.out.println(d1 + " int value " + b1);
        System.out.println(d2 + " int value " + b2);
        System.out.println(d3 + " int value " + b3);
    }
-12.0 int value -12
3.14 int value 3
6.99 int value 6
1.7976931348623157E308 int value 2147483647

Double.MAX_VALUE转换为int类型时的结果是2147483647,这正是int类型的最大值。

doubleValue()方法 获取double值

返回此Double对象的double值。

✍方法声明

public double doubleValue();

  • 🪐返回值:此对象所表示的double值。
    public static void main(String[] args) {
        Double d = Double.valueOf("12");
        double b = d.doubleValue();
        Double d1 = Double.valueOf("-5.66");
        double b1 = d1.doubleValue();
        Double d2 = Double.valueOf(Double.NaN);
        double b2 = d2.doubleValue();
        System.out.println(d + " double value " + b);
        System.out.println(d1 + " double value " + b1);
        System.out.println(d2 + " double value " + b2);
    }
12.0 double value 12.0
-5.66 double value -5.66
NaN double value NaN

floatValue()方法 获取float值

返回此Double对象的float值。

✍方法声明

public float floatValue();

  • 🪐返回值:转换为float类型的由此对象所表示的double值。
    public static void main(String[] args) {
        Double d = Double.valueOf("12");
        float b = d.floatValue();
        Double d1 = Double.valueOf(Double.MAX_VALUE);
        float b1 = d1.floatValue();
        Double d2 = Double.valueOf(Double.MIN_VALUE);
        float b2 = d2.floatValue();
        Double d3 = Double.valueOf(Double.NaN);
        float b3 = d3.floatValue();
        System.out.println(d + " float value " + b);
        System.out.println(d1 + " float value " + b1);
        System.out.println(d2 + " float value " + b2);
        System.out.println(d3 + " float value " + b3);
    }

double 的取值范围大于 float的范围,double的最大值在转换为float时会溢出为正无穷大,而double的最小值在转换为float时可能会下溢为零。

12.0 float value 12.0
1.7976931348623157E308 float value Infinity
4.9E-324 float value 0.0
NaN float value NaN

longValue() 获取long值

将Double值以long形式返回(强制转换为long类型)。

✍方法声明

public long longValue();

  • 🪐返回值:转换为long类型的由此对象所表示的double值。

下面代码创建Double对象d,并通过Double类的longValue()方法将对象d的参数值强制转换成long型变量。

    public static void main(String[] args) {
        Double d = Double.valueOf("3.14159");
        long b = d.longValue();
        Double d1 = Double.valueOf(Double.MAX_VALUE);
        long b1 = d1.longValue();
        Double d2 = Double.valueOf(Double.MIN_VALUE);
        long b2 = d2.longValue();
        Double d3 = Double.valueOf(Double.NaN);
        long b3 = d3.longValue();
        System.out.println(d + " long value " + b);
        System.out.println(d1 + " long value " + b1);
        System.out.println(d2 + " long value " + b2);
        System.out.println(d3 + " long value " + b3);
    }
3.14159 long value 3
1.7976931348623157E308 long value 9223372036854775807
4.9E-324 long value 0
NaN long value 0

如果double值超出了目标类型的范围,转换的结果会被截断或饱和。Double.MAX_VALUE转换为long类型时的结果是9223372036854775807,这正是long类型的最大值。

shortValue()方法 获取short值

将Double值以short形式返回(强制转换为short)。

✍方法声明

public short shortValue();

  • 🪐返回值:转换为short类型由此对象所表示的double值。
    public static void main(String[] args) {
        Double d = Double.valueOf("3.14159");
        short b = d.shortValue();
        Double d1 = Double.valueOf(Double.MAX_VALUE);
        short b1 = d1.shortValue();
        Double d2 = Double.valueOf(Double.MIN_VALUE);
        short b2 = d2.shortValue();
        Double d3 = Double.valueOf(Double.NaN);
        short b3 = d3.shortValue();
        System.out.println(d + " short value " + b);
        System.out.println(d1 + " short value " + b1);
        System.out.println(d2 + " short value " + b2);
        System.out.println(d3 + " short value " + b3);
    }

转换只取整数部分,Double 的最小值转换为 float 的 0,最大值转换为 -1:

3.14159 short value 3
1.7976931348623157E308 short value -1
4.9E-324 short value 0
NaN short value 0

parseDouble() 将字符串解析为double值

获取指定String值的double表示形式。如果字符串中不包含可解析的double则抛出异常。该方法与Double类的valueOf方法一样。

✍方法声明

public static double parseDouble(String s) throws NumberFormatException;

  • 🪐返回值:s为指定要解析的字符串。
  • 🪐返回值:由字符串参数返回的double值。
  • 🐛抛出异常NumberFormatException:如果字符串不包含可解析的double值。
    public static void main(String[] args) {
        double d1 = Double.parseDouble("1.234");
        double d2 = Double.parseDouble("-2.345");
        double d3 = Double.parseDouble("+999");
        double d4 = Double.parseDouble("0x4.0p-1");
        System.out.println(d1);
        System.out.println(d2);
        System.out.println(d3);
        System.out.println(d4);
    }
1.234
-2.345
999.0
2.0

parseDouble() 支持数字后缀 d/f,也支持Double 中特定的几种形式:

    public static void main(String[] args) {
        double d1 = Double.parseDouble("2.5d");
        double d2 = Double.parseDouble("9.99f");
        System.out.println(d1);
        System.out.println(d2);

        double d3 = Double.parseDouble("NaN");
        double d4 = Double.parseDouble("Infinity");
        System.out.println(d3);
        System.out.println(d4);
    }
2.5
9.99
NaN
Infinity

其他非法数字将无法解析:

    public static void main(String[] args) {
        double d1 = Double.parseDouble("1A"); //java.lang.NumberFormatException: For input string: "1A"
        double d2 = Double.parseDouble("两"); //java.lang.NumberFormatException: For input string: "两"
        double d3 = Double.parseDouble("zero");//java.lang.NumberFormatException: For input string: "zero"
    }

📝总结

💡 Double类提供了多种方法来转换Double对象表示的double值到不同的数值类型。
💡 在转换过程中,如果double值超出了目标类型的范围,转换的结果会被截断或饱和,而不会抛出异常。
💡 parseDouble()方法用于将字符串解析为double值,如果字符串不是有效的double表示,则会抛出NumberFormatException。
💡 在使用Double类的转换方法时,应该注意处理数值范围的问题,以确保数据的正确性和程序的稳定性。

转载请注明出处:码谱记录 » 双精度数字类 Double 与其他类型转换
标签: