真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

BigDecimal使用加減乘除小數(shù)點(diǎn)比較大小-創(chuàng)新互聯(lián)

BigDecimal 日常開(kāi)發(fā)咋用 簡(jiǎn)介

用最簡(jiǎn)單的話來(lái)概括就是,這是ava.math包中提供的API類(lèi),對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算。
一般在java開(kāi)發(fā)中,涉及到金額等敏感數(shù)字,不能接收有任何精度損失的時(shí)候,使用BigDecimal解決相關(guān)問(wèn)題。
ps:為何不使用double 是因?yàn)殡p精度浮點(diǎn)型變量double可以處理16位有效數(shù),但是實(shí)際生活業(yè)務(wù)場(chǎng)景中,大額數(shù)字(尤其是日元,韓元,津巴布韋幣。。)會(huì)失去精度,因?yàn)椴徽撌莊loat 還是double都是浮點(diǎn)數(shù),而計(jì)算機(jī)是二進(jìn)制的,浮點(diǎn)數(shù)會(huì)失去一定的精確度。十進(jìn)制值通常沒(méi)有完全相同的二進(jìn)制表示形式;十進(jìn)制數(shù)的二進(jìn)制表示形式可能不精確。

創(chuàng)新互聯(lián)建站是一家專(zhuān)注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),江山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:江山等地區(qū)。江山做網(wǎng)站價(jià)格咨詢:18982081108構(gòu)造器

BigDecimal(int) 創(chuàng)建一個(gè)具有參數(shù)所指定整數(shù)值的對(duì)象。

BigDecimal(double) 創(chuàng)建一個(gè)具有參數(shù)所指定雙精度值的對(duì)象。(不建議采用)

BigDecimal(long) 創(chuàng)建一個(gè)具有參數(shù)所指定長(zhǎng)整數(shù)值的對(duì)象。

BigDecimal(String) 創(chuàng)建一個(gè)具有參數(shù)所指定以字符串表示的數(shù)值的對(duì)象。

推薦使用BigDecimal.valueOf()方法來(lái)完成初始化值,少用構(gòu)造方法對(duì)BigDecimal賦值,BigDecimal構(gòu)造器會(huì)對(duì)不同數(shù)據(jù)類(lèi)型調(diào)用不通的構(gòu)造方法。

加減乘除

BigDecimal amount = new BigDecimal("3");
		BigDecimal decimal = BigDecimal.valueOf(3);
		BigDecimal add = amount.add(decimal);
		System.out.println(add);
		System.out.println(amount.add(decimal));
		amount = amount.add(decimal);
		System.out.println(amount);

輸出結(jié)果在這里插入圖片描述

BigDecimal amount = new BigDecimal("3");
		BigDecimal decimal = BigDecimal.valueOf(3);
		BigDecimal add = amount.subtract(decimal);
		System.out.println(add);
		System.out.println(amount);

輸出結(jié)果在這里插入圖片描述
PS:從這里可以看出,bigDecimal是對(duì)象之間的操作,amount.subtract()后,amount對(duì)象本身的值是不會(huì)變化的,需要用一個(gè)新的對(duì)象來(lái)接收相減后的值。

BigDecimal amount = new BigDecimal("3");
		BigDecimal decimal = BigDecimal.valueOf(3);
		BigDecimal add = amount.multiply(decimal);
		System.out.println(add);
		System.out.println(amount);

輸出結(jié)果在這里插入圖片描述

BigDecimal amount = new BigDecimal("3");
		BigDecimal decimal = BigDecimal.valueOf(3);
		BigDecimal add = amount.divide(decimal);
		System.out.println(add);
		System.out.println(amount);

輸出結(jié)果在這里插入圖片描述
使用除法后,出現(xiàn)無(wú)限不循環(huán)小數(shù)等等復(fù)雜情況下,可以設(shè)置保留相關(guān)小數(shù)
報(bào)錯(cuò)信息:
Exception in thread “main” java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1707)
at com.yhsc.yhsc.mall.service.impl.YhscApproveLogServiceImpl.main(YhscApproveLogServiceImpl.java:74)

小數(shù)點(diǎn)設(shè)置
BigDecimal amount = new BigDecimal("10");
		BigDecimal decimal = BigDecimal.valueOf(3);
		BigDecimal add = amount.divide(decimal,2,ROUND_CEILING);
		System.out.println(add);
		System.out.println(amount);

輸出結(jié)果在這里插入圖片描述
divide(bigdecimal,保留小數(shù)點(diǎn)后幾位小數(shù),舍入模式)

舍入模式

ROUND_CEILING

向正的無(wú)限方向舍入

ROUND_DOWN

向零方向舍入

ROUND_FLOOR

向負(fù)的無(wú)限方向舍入

ROUND_HALF_DOWN

除非兩側(cè)距離相等,否則四舍五入到最接近(距離)的一側(cè)。 如果是,就四舍五入。 例如,1.55會(huì)保留小數(shù)1.5的結(jié)果

ROUND_HALF_EVEN

向最接近(距離)的一側(cè)的舍入,除了兩側(cè))的距離相等的情況以外,如果是,則在預(yù)約位數(shù)為奇數(shù)的情況下為ROUND_HALF_UP,在偶數(shù)的情況下為

ROUND_HALF_DOWN

ROUND_HALF_UP (常用)

方向(距離) )

最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數(shù)結(jié)果為1.6,也就是我們常說(shuō)的“四舍五入”
ROUND_UNNECESSARY

計(jì)算結(jié)果是精確的,不需要舍入模式

ROUND_UP

向遠(yuǎn)離0的方向舍入

對(duì)BigDecimal進(jìn)行截?cái)?br />需要對(duì)BigDecimal進(jìn)行截?cái)嗪退纳嵛迦肟捎胹etScale方法

  1. setScale(int x); BigDecimal值后保留x位小數(shù)

  2. setScale(x, BigDecimal.ROUND_DOWN); 保留1位小數(shù),默認(rèn)用四舍五入

  3. setScale(x, BigDecimal.ROUND_HALE_UP); 保留一位小數(shù),向上舍入

  4. setScale(x, BigDecimal.ROUND_HALF_DOWN); 保留一位小數(shù),向下舍入

BigDecimal amount = new BigDecimal("10.565305");
		BigDecimal bigDecimal1 = amount.setScale(1, BigDecimal.ROUND_DOWN);// 直接刪除多余的小數(shù)
		BigDecimal bigDecimal2 = amount.setScale(2, BigDecimal.ROUND_HALF_UP);//四舍五入,向上舍入
		BigDecimal bigDecimal3 = amount.setScale(3, BigDecimal.ROUND_HALF_DOWN);//四舍五入,向下舍入
		System.out.println(bigDecimal1);
		System.out.println(bigDecimal2);
		System.out.println(bigDecimal3);

輸出結(jié)果

如何比較

BigDecimal比較大小使用compareTo(BigDecimal)方法:

int flag = bigdemical.compareTo(bigdemical1)。

flag = -1,表示bigdemical小于bigdemical1。

flag =0,表示bigdemical等于bigdemical1。

flag =1,表示bigdemical大于bigdemical1。

實(shí)際中直接跟0比較就可以了,別跟-1或者1比較。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前標(biāo)題:BigDecimal使用加減乘除小數(shù)點(diǎn)比較大小-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)URL:http://weahome.cn/article/dhjgoc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部