Java 中各数字类型(Double, Float, Long, Integer) 之间以及字符串之间的转换
1. 數字類型間的轉換
類型?double,?float,?long,?int?都是 Java 中原始的數字類型. Java 提供了這原始類型的包裝類, 并提供了一些便于使用的方法比如類型的轉換, 通過字符串解析, 字符串轉換等. 具體原始類型的包裝類型如下表:
| 原始類型 | 對應的包裝類 |
| double | java.lang.Double |
| float | java.lang.Float |
| long | java.lang.Long |
| int | java.lang.Integer |
所有上述的包裝類都繼承自抽象類?java.lang.Numer, 而?Number?類中定義了?doubleValue(),?floatValue(),?longValue()?和?intValue()?這些抽象方法, 因此作為它的實現子類, 也都帶有這些方法. 這樣只要使用對應的封裝類初始化了一個對應的封裝類的對象, 就能很容易的通過上述方法轉換成其他類型的數字了.
這樣數字類型間的轉換, 只需要兩步:
需要注意的是, 從占位更多的數字類型轉換到占位更少的數字類型, 比如 Double 到其他數字類, 可能會丟失數據, 數值溢出或返回?Infinity, 示例如下:
將各中類型的數字的最大值轉換成其他值的示例:
package com.yi21.article;public class Yi21NumberConversion {public static void main(String[] args) {showNumber(Double.valueOf(Double.MAX_VALUE - 1), "Double");line();showNumber(Float.valueOf(Float.MAX_VALUE), "Float");line();showNumber(Long.valueOf(Long.MAX_VALUE), "Long");line();showNumber(Integer.valueOf(21), "Integer");}private static void showNumber(Number n, String type) {System.out.println("數字 n 的類型: " + type);System.out.println("數字 n 的 double 形式的值: " + n.doubleValue());System.out.println("數字 n 的 float 形式的值: " + n.floatValue());System.out.println("數字 n 的 long 形式的值: " + n.longValue());System.out.println("數字 n 的 int 形式的值: " + n.intValue());}private static void line() {System.out.println("-".repeat(40));}}以上代碼執行結果如下:
數字 n 的類型: Double 數字 n 的 double 形式的值: 1.7976931348623157E308 數字 n 的 float 形式的值: Infinity 數字 n 的 long 形式的值: 9223372036854775807 數字 n 的 int 形式的值: 2147483647 ---------------------------------------- 數字 n 的類型: Float 數字 n 的 double 形式的值: 3.4028234663852886E38 數字 n 的 float 形式的值: 3.4028235E38 數字 n 的 long 形式的值: 9223372036854775807 數字 n 的 int 形式的值: 2147483647 ---------------------------------------- 數字 n 的類型: Long 數字 n 的 double 形式的值: 9.223372036854776E18 數字 n 的 float 形式的值: 9.223372E18 數字 n 的 long 形式的值: 9223372036854775807 數字 n 的 int 形式的值: -1 ---------------------------------------- 數字 n 的類型: Integer 數字 n 的 double 形式的值: 21.0 數字 n 的 float 形式的值: 21.0 數字 n 的 long 形式的值: 21 數字 n 的 int 形式的值: 212. 字符串轉換成數字
將字符串轉換成數字主要依賴于?valueOf(String s)?方法, 他們實際調用的都是各自的?parseXX()?方法, 比如?Double?的?parseDouble(),?Long?的?parseLong()?方法. 而他們的主要差別在于?parseXX()?方法返回的是原始類型, 而?valueOf()?方法返回的是原始類型對應的封裝類. 其中,?Long?和?Integer?還擁有?valueOf(String s, int radix)?方法用以解析不同進制數字的字符串, 可選的進制數量在 Java 11 版本中是 2 - 36. 具體的使用示例如下:?
解析各類字符串到數字的示例:
package com.yi21.article;public class Yi21NumberParseString {public static void main(String[] args) {System.out.println("--- Double 解析示例: ");String s = "-3.3212e19";System.out.println(Double.valueOf(s));s = "-5.141f";System.out.println(Double.valueOf(s));//非數字s = "NaN";System.out.println(Double.valueOf(s));System.out.println(Double.parseDouble(s));System.out.println("---- Float 轉換示例: ");//無窮大s = "Infinity";System.out.println(Float.valueOf(s));s = ".73";System.out.println(Float.valueOf(s));//十六進制數s = "0X10002.2p2 ";System.out.println(Float.valueOf(s));System.out.println(Float.parseFloat(s));System.out.println("----- Long 轉換示例: ");//三十六進制數s = "1y2p0ij32e8e7";System.out.println(Long.valueOf(s, 36));s = "21";System.out.println(Long.valueOf(s));System.out.println("-- Integer 轉換示例: ");//三十六進制數s = "21yi";System.out.println(Integer.valueOf(s, 36));//三十五進制數s = "21yi";System.out.println(Integer.valueOf(s, 35));s = "21";System.out.println(Integer.valueOf(s));try {s = "Double.MAX";System.out.println(Double.valueOf(s));} catch (NumberFormatException e) {System.out.println("解析 Double 出錯了: " + e.getMessage());}try {//無窮大s = "Infinity";System.out.println(Long.valueOf(s));} catch (NumberFormatException e) {System.out.println("解析 Long 出錯了: " + e.getMessage());}}}以上代碼執行結果如下:
--- Double 解析示例: -3.3212E19 -5.141 NaN NaN ---- Float 轉換示例: Infinity 0.73 262152.5 262152.5 ----- Long 轉換示例: 9223372036854775807 21 -- Integer 轉換示例: 95850 88183 21 解析 Double 出錯了: For input string: "Double.MAX" 解析 Long 出錯了: For input string: "Infinity"3. 數字轉換成字符串
將數字轉換成字符串主要依賴于?toString()?方法, 但同時各類又提供了?toHexString()?方法將當前數字轉換成16進制字符串, 而?Long?和?Integer?類額外提供了?toBinaryString()?和?toOctalString()?方法, 來分別將數字轉換成 二進制字符串和八進制字符串. 以下是使用示例:
將各種數字轉換到各種進制字符串的示例:
package com.yi21.article;public class Yi21NumberToString {public static void main(String[] args) {Double d = Double.MAX_VALUE;System.out.println("d 轉換成字符串: " + d.toString());System.out.println("d 轉換成十六進制字符串: " + Double.toHexString(d));Float f = Float.MAX_VALUE;System.out.println("f 轉換成字符串: " + f.toString());System.out.println("f 轉換成十六進制字符串: " + Float.toHexString(f));Long l = Long.MAX_VALUE;System.out.println("l 轉換成字符串: " + l.toString());System.out.println("l 轉換成二進制字符串: " + Long.toBinaryString(l));System.out.println("l 轉換成八進制字符串: " + Long.toHexString(l));System.out.println("l 轉換成十六進制字符串: " + Long.toHexString(l));Integer i = Integer.MAX_VALUE;System.out.println("i 轉換成字符串: " + i.toString());System.out.println("i 轉換成二進制字符串: " + Integer.toBinaryString(i));System.out.println("i 轉換成八進制字符串: " + Integer.toHexString(i));System.out.println("i 轉換成十六進制字符串: " + Integer.toHexString(i));}}以上代碼執行結果如下:
d 轉換成字符串: 1.7976931348623157E308 d 轉換成十六進制字符串: 0x1.fffffffffffffp1023 f 轉換成字符串: 3.4028235E38 f 轉換成十六進制字符串: 0x1.fffffep127 l 轉換成字符串: 9223372036854775807 l 轉換成二進制字符串: 111111111111111111111111111111111111111111111111111111111111111 l 轉換成八進制字符串: 7fffffffffffffff l 轉換成十六進制字符串: 7fffffffffffffff i 轉換成字符串: 2147483647 i 轉換成二進制字符串: 1111111111111111111111111111111 i 轉換成八進制字符串: 7fffffff i 轉換成十六進制字符串: 7fffffff本文首發地址https://21yi.com/a/170471860012584960.html
總結
以上是生活随笔為你收集整理的Java 中各数字类型(Double, Float, Long, Integer) 之间以及字符串之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机数制
- 下一篇: 基于Java内存溢出的解决方法详解