Double類型19.90變身19.89事件偵破

案發現場

在這裏插入圖片描述
運行結果出乎意料,並不是想要的1990;

事件跟蹤

19.9 作爲 Double 類型表示,二進制形式是:
1 00000000110 011111001100110011001100110011001100110011001100110
(注意中間的兩個空格,如果你不知道啥意思,就去查查double的內存表示形式吧)
但是19.9 * 100 由於是二進制運算的結果是
1 00000010011 111000101111111111111111111111111111111111111111111
由於後面有n個11111所以我猜測可能發生了溢出被計算機捨去了.
於是這個數字比 1990少那麼一點點(可能是 1989.99999999…)
但是你的取整操作卻直接截斷了後面的數字,於是成了1989

案件偵破

次偵破過程出現些許差錯,BigDecimal()值得重視,String類型和double類型回執參數不通;入參爲String類型(涉足參需謹慎);

代碼運行截圖

在這裏插入圖片描述

代碼塊

public static void main(String[] args) throws Exception {
        double d = 19.9;

        // 入參爲String類型
        BigDecimal bignum1 = new BigDecimal(String.valueOf(d));
        BigDecimal bignum2 = new BigDecimal("100");
        BigDecimal bignum3 = bignum1.multiply(bignum2); //乘法運算

        // 入參爲double類型
        BigDecimal bignum4 = new BigDecimal(d);
        BigDecimal bignum5 = new BigDecimal("100");
        BigDecimal bignum6 = bignum4.multiply(bignum5); //乘法運算

        System.out.println(bignum6.intValue());
        System.out.println(bignum3.intValue());
    }

案件偵破協助

https://blog.csdn.net/qingdaohaoyunpeng/article/details/50738995

發佈了35 篇原創文章 · 獲贊 27 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章