摘要:錯(cuò)誤將導(dǎo)致不能漲薪。如果未指定舍入模式,并且無(wú)法表示準(zhǔn)確結(jié)果,則拋出一個(gè)異常否則,通過(guò)向該操作提供適當(dāng)?shù)膶?duì)象,可以對(duì)已選擇的精度和舍入模式執(zhí)行計(jì)算。使用此類例如,中的整數(shù)字段來(lái)表示舍入模式已過(guò)時(shí)應(yīng)改為使用例如,的枚舉值。
為什么金額要使用BigDecimal而不使用Double?
在電商或者金融行業(yè),看似很小的誤差但是通過(guò)一番計(jì)算后會(huì)導(dǎo)致很大的誤差,誤差將演變?yōu)殄e(cuò)誤。錯(cuò)誤將導(dǎo)致不能漲薪。
BigDecimal 類提供以下操作:算術(shù)、標(biāo)度操作、舍入、比較、哈希算法和格式轉(zhuǎn)換
例1: Double d1 = 1.0000001; Double d2 = 0.000002; //理想輸出1.0000021,實(shí)際輸出1.0000021000000001 System.out.println(d1+d2); //實(shí)際輸出1.0000021 理想輸出1.0000021 System.out.println(new BigDecimal(d1.toString()).add(new BigDecimal(d2.toString()))); 例2: Double d3 = 11540d; Double d4 = 0.35; //實(shí)際輸出4038.9999999999995 理想輸出4039 System.out.println(d3*d4); //實(shí)際輸出4039.000 理想輸出4039 System.out.println(new BigDecimal(d3.toString()).multiply(new BigDecimal(d4.toString())));
BigDecimal decimal = new BigDecimal("1.3"); BigDecimal decimal1 = new BigDecimal("3.32"); //加 System.out.println(decimal.add(decimal1)); //減 System.out.println(decimal1.subtract(decimal)); //乘 System.out.println(decimal1.multiply(decimal)); //除 System.out.println(decimal1.divide(decimal,2,BigDecimal.ROUND_CEILING ));
BigDecimal 類使用戶能完全控制舍入行為。如果未指定舍入模式,并且無(wú)法表示準(zhǔn)確結(jié)果,則拋出一個(gè)異常;否則,通過(guò)向該操作提供適當(dāng)?shù)?MathContext 對(duì)象,可以對(duì)已選擇的精度和舍入模式執(zhí)行計(jì)算。在任何情況下,可以為舍入控制提供八種舍入模式。使用此類(例如,ROUND_HALF_UP)中的整數(shù)字段來(lái)表示舍入模式已過(guò)時(shí);應(yīng)改為使用 RoundingMode enum(例如,RoundingMode.HALF_UP)的枚舉值。
八種舍入模式:
CEILING 向正無(wú)限大方向舍入的舍入模式。 DOWN 向零方向舍入的舍入模式。 FLOOR 向負(fù)無(wú)限大方向舍入的舍入模式。 HALF_DOWN 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向下舍入。 HALF_EVEN 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向相鄰的偶數(shù)舍入。 HALF_UP 向最接近數(shù)字方向舍入的舍入模式,如果與兩個(gè)相鄰數(shù)字的距離相等,則向上舍入 UNNECESSARY 用于斷言請(qǐng)求的操作具有精確結(jié)果的舍入模式,因此不需要舍入。 UP 遠(yuǎn)離零方向舍入的舍入模式。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75906.html
摘要:返回的是是一個(gè)整數(shù)的最小值。筆記這個(gè)構(gòu)造函數(shù)的結(jié)果可能有些不可預(yù)測(cè)。這是因?yàn)椴荒芟窕蛘咦鳛槿魏斡邢揲L(zhǎng)度的二進(jìn)制分?jǐn)?shù)精確地表示。當(dāng)必須用作源為,注意,此構(gòu)造提供了一個(gè)精確的轉(zhuǎn)換它不會(huì)將轉(zhuǎn)換為使用方法,然后使用構(gòu)造函數(shù)相同的結(jié)果。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) BigInteger和BigDecimal類 BigInteger類 (一) 構(gòu)造方法: //針對(duì)超過(guò)整數(shù)范圍的運(yùn)算(整數(shù)最大...
摘要:項(xiàng)目環(huán)境用于發(fā)送請(qǐng)求測(cè)試項(xiàng)目介紹這是一個(gè)商城項(xiàng)目,本來(lái)想起名叫項(xiàng)目,發(fā)現(xiàn)自己并沒(méi)有用。也是自己第一篇博客,記錄一下自己的學(xué)習(xí)過(guò)程,希望一方面能多做寫項(xiàng)目鍛煉能力,另一方面也讓自己在做完之后寫寫博客自己總結(jié)反思。 1.項(xiàng)目環(huán)境 IDEA15 spring4 mybatis3.4 mysql RestLet Client用于發(fā)送請(qǐng)求測(cè)試 2.項(xiàng)目介紹 這是一個(gè)商城項(xiàng)目,本來(lái)想起名叫SSM項(xiàng)...
摘要:舍入方式需要弄明白自己的業(yè)務(wù)才用,別為了用而隨便選一個(gè)用四舍五入模式從零四舍五入。原值結(jié)論都是向前進(jìn)一位四舍五入到正無(wú)窮。 一:相除精度丟失的問(wèn)題 BigDecimal的api除法相對(duì)加減乘要實(shí)現(xiàn)的復(fù)雜多了,只介紹常用的我遇到的問(wèn)題: 問(wèn)題:兩數(shù)相除,如果9/3=3整除沒(méi)問(wèn)題,但是10/3=0.33333333......除不盡,這里不能讓電腦一直除不盡,所以BigDecimal...
摘要:成員方法類概述用于產(chǎn)生隨機(jī)數(shù)成員方法正則表達(dá)式相關(guān)方法判斷功能分割功能替換功能獲取功能和類的使用類概述包含一些有用的類字段和方法。注意它不能被實(shí)例化,因?yàn)榇祟悩?gòu)造器是私有的成員方法類類概述表示特定的瞬間,精確到毫秒。 前言 我們都知道,JDK包含了JRE,而JRE中也提供了各種功能的java類,現(xiàn)在我們就對(duì)這些類有個(gè)簡(jiǎn)單了解,然后靈活運(yùn)用。 常用類:Object類/Scanner類,...
摘要:然而表示這個(gè)是的鍋,我不背。的表示一共的數(shù)字位能存儲(chǔ)個(gè),表示存儲(chǔ)兩位小數(shù)。因?yàn)槟J(rèn)是保留兩位小數(shù),超過(guò)了精度,所以保存近似值。大范圍低精度存儲(chǔ)。很準(zhǔn)確,采用科學(xué)計(jì)數(shù)法,損失精度,但能存儲(chǔ)更大范圍的數(shù)據(jù),但是精度有損失。 BigDecimal 為什么要使用這個(gè)呢?簡(jiǎn)單點(diǎn)說(shuō)就是商業(yè)要求精度計(jì)算,而double計(jì)算出來(lái)的結(jié)果,往往出人意料。 例子 Double運(yùn)算 showImg(https...
閱讀 2908·2021-11-23 09:51
閱讀 1554·2021-11-15 11:36
閱讀 3013·2021-10-13 09:40
閱讀 1898·2021-09-28 09:35
閱讀 13077·2021-09-22 15:00
閱讀 1374·2019-08-29 13:56
閱讀 2929·2019-08-29 13:04
閱讀 2702·2019-08-28 18:06