Java你不了解的大數(shù)型BigInteger與BigDecimal類
BigInteger類
在Java當(dāng)中,是有許多數(shù)字要進(jìn)行處理的類,比如Integer類,但是Integer類它也是有上限的。它的最大值就是到2^31-1.
如果我們此時(shí)想要表示更大的數(shù),那就用Integer是無(wú)法表示的了,所在在Java當(dāng)中提供了BigInteger類。
BigInteger類支持的數(shù)字可以說(shuō)是無(wú)限大的,且支持任意精度的整數(shù),也就是說(shuō)他可以準(zhǔn)確的表示任意數(shù)值而不會(huì)產(chǎn)生丟失的。
在這里也強(qiáng)調(diào)一下,因?yàn)閭魅氲臄?shù)型是字符型,所以在做運(yùn)算的時(shí)候,不能使用 + - * /
對(duì)應(yīng)的就是使用它們的方法:
add(),subtract(),multiply(),divide()
還有一些常用方法:
equals方法。進(jìn)行比較
代碼演示一下:
import java.math.BigInteger; public class Demo01 { public static void main(String[] args) { BigInteger bigInteger1 = new BigInteger("2222222222222222222222222222222"); BigInteger bigInteger2 = new BigInteger("1111111111111111111111111111111"); System.out.println("bigInteger1大數(shù)為:" + bigInteger1); System.out.println("bigInteger2大數(shù)為:" + bigInteger2); System.out.println("兩個(gè)大數(shù)相加:" + bigInteger1.add(bigInteger2));//加 System.out.println("兩個(gè)大數(shù)相減:" + bigInteger1.subtract(bigInteger2));//減 System.out.println("兩個(gè)大數(shù)相乘:" + bigInteger1.multiply(bigInteger2));//乘 System.out.println("兩個(gè)大數(shù)相除:" + bigInteger1.divide(bigInteger2));//除 System.out.println("兩個(gè)大數(shù)相比:" + bigInteger1.equals(bigInteger2));//equals進(jìn)行比較 } }
在做除法的時(shí)候,如果有小數(shù)位,是這接截取掉小數(shù)位。
當(dāng)然這方面不僅僅有有整型的,也有浮點(diǎn)型。
BigDecimal類
當(dāng)然浮點(diǎn)型的精度也是可以盡可能大的。
import java.math.BigDecimal; public class Demo02 { public static void main(String[] args) { BigDecimal bigDecimal1 = new BigDecimal("12232423432432.53241234324"); BigDecimal bigDecimal2 = new BigDecimal("2.0"); System.out.println("bigDecimal1值: " + bigDecimal1); System.out.println("bigDecimal2值: " + bigDecimal2); System.out.println("加:" + bigDecimal1.add(bigDecimal2)); System.out.println("減:" + bigDecimal1.subtract(bigDecimal2)); System.out.println("乘:" + bigDecimal1.multiply(bigDecimal2)); System.out.println("除:" + bigDecimal1.divide(bigDecimal2)); } }
在BigDecimal的方法里面,也更好的解決java語(yǔ)言里面的精度問(wèn)題(比如出現(xiàn)0.1x3 == 0.3的結(jié)果為false的問(wèn)題)
BigDecimal類當(dāng)中除法除不盡問(wèn)題
但是在使用BigDecimal的時(shí)候也有一個(gè)點(diǎn)需要注意一下(當(dāng)遇到不能除凈的話,它會(huì)選擇報(bào)錯(cuò)的。)
所以在做除法的時(shí)候,直接給它做一個(gè)截取位數(shù)就好。
先來(lái)看一個(gè)方法:
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
divisor - 除數(shù)。
scale - 小數(shù)點(diǎn)后保留幾位
roundingMode - 選擇舍入模式
所以我們就可以將它寫(xiě)成這樣:
舍入模式選擇:
模式 | 意思 |
---|---|
ROUND_CEILING | 向正無(wú)窮取數(shù) |
ROUND_DOWN | 向0取數(shù) |
ROUND_FLOOR | 向負(fù)無(wú)窮取數(shù) |
ROUND_HALF_DOWN | 四舍五入遇到 .5向下取數(shù) |
ROUND_HALF_UP | 四舍五入遇到 .5向上取數(shù) |
ROUND_HALF_EVEN | 四舍五入遇到5看前面的數(shù),大于5向上,小于5向下,等于5再向前看。 |
到此這篇關(guān)于Java你不了解的大數(shù)型BigInteger與BigDecimal類的文章就介紹到這了,更多相關(guān)Java BigInteger類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java BigInteger類,BigDecimal類,Date類,DateFormat類及Calendar類用法示例
- JAVA基本類型包裝類 BigDecimal BigInteger 的使用
- Java Big Number操作BigInteger及BigDecimal類詳解
- JAVA?biginteger類bigdecimal類的使用示例學(xué)習(xí)
- Java中BigInteger與BigDecimal類用法總結(jié)
- java數(shù)學(xué)類Math?BigInteger?BigDecimal使用介紹
- Java中的System類、BigInteger類和BigDecimal類詳解
- JavaAPI中BigInteger、BigDecimal的使用方法及應(yīng)用
相關(guān)文章
SpringBoot 普通類調(diào)用Bean對(duì)象的一種方式推薦
這篇文章主要介紹了SpringBoot 普通類調(diào)用Bean對(duì)象的一種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java中通過(guò)反射實(shí)現(xiàn)代理Proxy代碼實(shí)例
這篇文章主要介紹了Java中通過(guò)反射實(shí)現(xiàn)代理Proxy代碼實(shí)例,java實(shí)現(xiàn)代理可以通過(guò)java.lang.reflect.Proxy接口結(jié)合java.lang.reflect.InvocationHandler來(lái)實(shí)現(xiàn),需要的朋友可以參考下2023-08-08一文學(xué)習(xí)Java NIO的ByteBuffer工作原理
很多網(wǎng)友說(shuō)JDK又在寫(xiě)B(tài)ug!下面通過(guò)通過(guò)本文學(xué)習(xí)下為何Java NIO的ByteBuffer這么垃圾,涉及到ByteBuf API 的優(yōu)點(diǎn)及工作原理解析,感興趣的朋友跟隨小編一起看看吧2021-05-05