Java浮點(diǎn)類(lèi)數(shù)字運(yùn)算方式
浮點(diǎn)數(shù)運(yùn)算可以直接使用 + 和 - 運(yùn)算符進(jìn)行加減操作,但可能會(huì)有一定的問(wèn)題:
- 精度問(wèn)題
- 比較問(wèn)題
- 累積誤差
一、比較大小
比較問(wèn)題:由于精度問(wèn)題,直接比較兩個(gè)浮點(diǎn)數(shù)是否相等可能會(huì)出錯(cuò)。
1.1 使用 compareTo() 方法
對(duì)于 Double 的包裝類(lèi),可以使用 compareTo() 方法來(lái)比較兩個(gè) Double 對(duì)象的大小。
這個(gè)方法同樣返回一個(gè)整數(shù),表示比較的結(jié)果
Double a = 0.1 + 0.2;
Double b = 0.3;
int result = a.compareTo(b);
if (result < 0) {
System.out.println("a is less than b");
} else if (result > 0) {
System.out.println("a is greater than b");
} else {
System.out.println("a is equal to b");
}1.2 使用容差值(Epsilon)比較
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 0.000001; // 容差值
if (Math.abs(a - b) < epsilon) {
System.out.println("a and b are approximately equal");
} else if (a < b) {
System.out.println("a is less than b");
} else {
System.out.println("a is greater than b");
}1.3 使用 Double.compare()
Double.compare() 方法是一個(gè)靜態(tài)方法,可以用來(lái)比較兩個(gè) double 值。
這個(gè)方法會(huì)返回一個(gè)整數(shù),表示第一個(gè)值與第二個(gè)值的關(guān)系:
- 如果第一個(gè)值小于第二個(gè)值,則返回負(fù)數(shù)。
- 如果第一個(gè)值等于第二個(gè)值,則返回零。
- 如果第一個(gè)值大于第二個(gè)值,則返回正數(shù)。
double a = 0.1 + 0.2;
double b = 0.3;
int result = Double.compare(a, b);
if (result < 0) {
System.out.println("a is less than b");
} else if (result > 0) {
System.out.println("a is greater than b");
} else {
System.out.println("a is equal to b");
}二、求和運(yùn)算
- 精度問(wèn)題:浮點(diǎn)數(shù)在計(jì)算機(jī)中是以近似值存儲(chǔ)的,因此在進(jìn)行加減運(yùn)算時(shí)可能會(huì)出現(xiàn)精度損失。
- 累積誤差:在進(jìn)行多次浮點(diǎn)數(shù)運(yùn)算時(shí),誤差可能會(huì)累積,導(dǎo)致結(jié)果偏差更大。
2.1 使用 BigDecimal 精確求和
// 創(chuàng)建 BigDecimal 對(duì)象
BigDecimal num1 = new BigDecimal("0.1");
BigDecimal num2 = new BigDecimal("0.2");
// 精確求和
BigDecimal sum = num1.add(num2);
sum.doubleValue()總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot整合kaptcha生成驗(yàn)證碼功能
這篇文章主要介紹了springboot整合kaptcha生成驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
淺談synchronized方法對(duì)非synchronized方法的影響
下面小編就為大家?guī)?lái)一篇淺談synchronized方法對(duì)非synchronized方法的影響。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
java super關(guān)鍵字知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理的是一篇關(guān)于java super關(guān)鍵字知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以參考下。2021-01-01
Java日常記錄之查看Maven本地倉(cāng)庫(kù)的位置
這篇文章主要介紹了Maven本地倉(cāng)庫(kù)的用途和配置方法,它提供了查看、修改本地倉(cāng)庫(kù)路徑的步驟,包括檢查settings.xml文件、使用Maven命令和查看輸出日志,需要的朋友可以參考下2024-12-12
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之嘟嘟健身房管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)健身房管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
List轉(zhuǎn)換成Map工具類(lèi)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇List轉(zhuǎn)換成Map工具類(lèi)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Spring項(xiàng)目中Ordered接口的應(yīng)用之全局過(guò)濾器(GlobalFilter)的順序控制
在Spring框架,尤其是Spring Cloud Gateway或Spring WebFlux項(xiàng)目中,Ordered接口扮演著重要的角色,特別是在實(shí)現(xiàn)全局過(guò)濾器(GlobalFilter)時(shí),用于控制過(guò)濾器執(zhí)行的優(yōu)先級(jí),下面將介紹如何在Spring項(xiàng)目中使用Ordered接口來(lái)管理Global Filter的執(zhí)行順序,需要的朋友可以參考下2024-06-06

