淺談Java中的高精度整數(shù)和高精度小數(shù)
在實際編碼中,會遇到很多高精度的事例,比如,在計算金錢的時候就需要保留高精度小數(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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java操作Jenkins操作憑證(Credential)信息方式
這篇文章主要介紹了Java操作Jenkins操作憑證(Credential)信息方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Spring?MVC如何實現(xiàn)接口Controller定義控制器
這篇文章主要介紹了Spring?MVC如何實現(xiàn)接口Controller定義控制器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
springboot用戶數(shù)據(jù)修改的詳細(xì)實現(xiàn)
用戶管理功能作為所有的系統(tǒng)是必不可少的一部分,下面這篇文章主要給大家介紹了關(guān)于springboot用戶數(shù)據(jù)修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Java的線程與進(jìn)程以及線程的四種創(chuàng)建方式
這篇文章主要為大家詳細(xì)介紹了Java的線程與進(jìn)程以及線程的四種創(chuàng)建方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
SpringBoot事務(wù)使用及回滾實現(xiàn)代碼詳解
這篇文章主要介紹了SpringBoot事務(wù)使用及回滾實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
Java實現(xiàn)md5和base64加密解密的示例代碼
這篇文章主要介紹了Java實現(xiàn)md5和base64加密解密的示例代碼,幫助大家更好的利用Java加密解密文件,感興趣的朋友可以了解下2020-09-09
springboot使用kafka推送數(shù)據(jù)到服務(wù)端的操作方法帶認(rèn)證
在使用Kafka進(jìn)行數(shù)據(jù)推送時,遇到認(rèn)證問題導(dǎo)致連接失敗,本文詳細(xì)介紹了Kafka的認(rèn)證配置過程,包括配置文件的引入和參數(shù)設(shè)置,實際測試表明,需要正確配置sasl.jaas.config以及其他認(rèn)證參數(shù),探討了配置文件是否可以同時存在多個配置塊的可能性,并提出了實際操作中的注意事項2024-11-11

