溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中高精度整數(shù)與高精度小數(shù)的區(qū)別有哪些

發(fā)布時間:2020-12-02 14:58:01 來源:億速云 閱讀:141 作者:Leah 欄目:編程語言

Java中高精度整數(shù)與高精度小數(shù)的區(qū)別有哪些?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在實際編碼中,會遇到很多高精度的事例,比如,在計算金錢的時候就需要保留高精度小數(shù),這樣計算才不會有太大誤差:

在下面的代碼中,我們驗證了,當(dāng)兩個float型的數(shù)字相加,得到的結(jié)果和我們的預(yù)期結(jié)果是有誤差的,為了減小和防止這種誤差的出現(xiàn),我們需要使用BigInteger類和BigDecimal類來計算。

package com.ietree.base.number;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigIntegerTest {

  public static void main(String[] args) {
    float f1 = 123.01f + 2.01f;
    // 預(yù)期輸出:125.02,實際輸出:125.020004
    System.out.println(f1);
    // 預(yù)期輸出:125.02,實際輸出:125.02000000000001
    System.out.println(123.01 + 2.01);
    System.out.println("===============================");

    // 高精度整數(shù)測試
    BigInteger bint1 = new BigInteger("125");
    BigInteger bint2 = new BigInteger("999");
    BigInteger tmp;
    // 相加
    tmp = bint1.add(bint2);
    System.out.println("bint1 + bint2 = " + tmp);
    // 相減
    tmp = bint2.subtract(bint1);
    System.out.println("bint2 - bint1 = " + tmp);
    // 相乘
    tmp = bint1.multiply(bint2);
    System.out.println("bint1 * bint2 = " + tmp);
    // 相除
    tmp = bint2.divide(bint1);
    System.out.println("bint2 / bint1 = " + tmp);
    // 求余數(shù)
    tmp = bint2.remainder(bint1);
    System.out.println("bint2 % bint1 = " + tmp);
    // 求次方
    tmp = bint2.pow(2);
    System.out.println("bint2的二次方 = " + tmp);
    System.out.println("======================================");

    // 高精度小數(shù)測試
    BigDecimal bd1 = new BigDecimal(123.01);
    BigDecimal bd2 = new BigDecimal(2.01);
    BigDecimal bd;
    // 相加
    bd = bd1.add(bd2);
    System.out.println("bd1 + bd2 = " + bd);
    // 相減
    bd = bd1.subtract(bd2);
    System.out.println("bd2 - bd1 = " + bd);
    // 相乘
    bd = bd1.multiply(bd2);
    System.out.println("bd1 * bd2 = " + bd);
    // 相除
    // bd = bd1.divide(bd2);
    bd = bd1.divide(new BigDecimal(2.0));
    System.out.println("bd1 / 2.0 = " + bd);
    // 求余數(shù)
    bd = bd1.remainder(bd2);
    System.out.println("bd2 % bd1 = " + bd);
    // 求次方
    bd = bd1.pow(3);
    System.out.println("bd2的三次方 = " + bd);
    System.out.println("======================================");

    // 四舍五入保留小數(shù)位數(shù)
    BigDecimal bd3 = new BigDecimal(123.01).setScale(5,5);
    System.out.println("bd3 = " + bd3);
  }
}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI