淺談Java中的高精度整數(shù)和高精度小數(shù)
更新時間:2017年08月14日 08:25:21 作者:閑情偶寄
本篇文章主要介紹了淺談Java中的高精度整數(shù)和高精度小數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
在實際編碼中,會遇到很多高精度的事例,比如,在計算金錢的時候就需要保留高精度小數(shù),這樣計算才不會有太大誤差:
在下面的代碼中,我們驗證了,當兩個float型的數(shù)字相加,得到的結果和我們的預期結果是有誤差的,為了減小和防止這種誤差的出現(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;
// 預期輸出:125.02,實際輸出:125.020004
System.out.println(f1);
// 預期輸出: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);
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
MyBatis?多表聯(lián)合查詢及優(yōu)化方法
大家都知道Hibernate 是全自動的數(shù)據(jù)庫持久層框架,它可以通過實體來映射數(shù)據(jù)庫,通過設置一對多、多對一、一對一、多對多的關聯(lián)來實現(xiàn)聯(lián)合查詢,接下來通過本文給大家介紹MyBatis?多表聯(lián)合查詢及優(yōu)化,需要的朋友可以參考下2022-08-08
SpringBoot之HandlerInterceptor攔截器的使用詳解
這篇文章主要介紹了SpringBoot之HandlerInterceptor攔截器的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
SpringBoot3整合郵件服務實現(xiàn)郵件發(fā)送功能
本文介紹了spring boot整合email服務,實現(xiàn)發(fā)送驗證碼,郵件(普通文本郵件、靜態(tài)資源郵件、附件郵件),文中通過代碼示例介紹的非常詳細,堅持看完相信對你有幫助,需要的朋友可以參考下2024-05-05
解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法
這篇文章主要給大家介紹了關于解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法,文中給出了三種解決的方法,大家可以根據(jù)需要選擇對應的方法,需要的朋友們下面來一起看看吧。2017-02-02
SpringBoot整合Freemarker實現(xiàn)頁面靜態(tài)化的詳細步驟
這篇文章主要介紹了SpringBoot整合Freemarker實現(xiàn)頁面靜態(tài)化,第一步要創(chuàng)建項目添加依賴,本文分步驟給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10

