在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Java中Double轉換大數字出現精度丟失或者錯誤

Java中Double轉換大數字出現精度丟失或者錯誤

Double轉換大數字出現精度丟失或者錯誤,如18位或以上的數字超過100000000000000000打印出來就會出現錯誤,用BigDecimal或者BigInteger能解決問題,Double的最大值也遠遠超過這個了呀,想知道為啥Double類型為什么會這種情況?

    NumberFormat nf = NumberFormat.getInstance();
    nf.setGroupingUsed(false);
    System.out.println(nf.format(Double.valueOf("100000000000000000")));//100000000000000000
    System.out.println(nf.format(Double.valueOf("100000000000000001")));//100000000000000000
    System.out.println(nf.format(Double.parseDouble("100000000000000216")));//100000000000000224
    System.out.println(new BigDecimal("100000000000000216"));//100000000000000216
回答
編輯回答
青黛色

double是二進制的存儲,一些看起來是整數的東西,通過二進制的科學計數法表示起來就變成無限小數了

2017年2月21日 07:39
編輯回答
風畔

double是科學計數法存數字的

2018年3月21日 12:32
編輯回答
離殤

不是所有最大最小值之間的數都能精確表示. 有限個字節(jié)顯然不可能表示無限精度 (這個集合甚至不可數).

2017年4月26日 10:21