一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 基于BigDecimal.setScale的用法小結(jié)

基于BigDecimal.setScale的用法小結(jié)

2020-09-26 21:34Wilson Tsai Java教程

這篇文章主要介紹了基于BigDecimal.setScale的用法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1. BigDecimal num1 = new BigDecimal(2.225667);//這種寫(xiě)法不允許,會(huì)造成精度損失

2. BigDecimal num2 = new BigDecimal(2);//這種寫(xiě)法是可以的

3. BigDecimal num = new BigDecimal("2.225667");//一般都會(huì)這樣寫(xiě)最好

4. int count = num.scale();

System.out.println(count);//6 返回的是小數(shù)點(diǎn)后位數(shù)

好了,下面開(kāi)始正式介紹知識(shí)點(diǎn)啦~~~~~~

1. ROUND_DOWN

BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);

System.out.println(b);//2.22 直接去掉多余的位數(shù)

2. ROUND_UP

BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);

System.out.println(c);//2.23 跟上面相反,進(jìn)位處理

3. ROUND_CEILING

天花板(向上),正數(shù)進(jìn)位向上,負(fù)數(shù)舍位向上

?
1
2
3
4
5
BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(f);//2.23 如果是正數(shù),相當(dāng)于BigDecimal.ROUND_UP
 
BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(g);//-2.22 如果是負(fù)數(shù),相當(dāng)于BigDecimal.ROUND_DOWN

4. ROUND_FLOOR

地板(向下),正數(shù)舍位向下,負(fù)數(shù)進(jìn)位向下

?
1
2
3
4
5
BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(h);//2.22 如果是正數(shù),相當(dāng)于BigDecimal.ROUND_DOWN
 
BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(i);//-2.23 如果是負(fù)數(shù),相當(dāng)于BigDecimal.ROUND_HALF_UP

5. ROUND_HALF_UP

BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);

System.out.println("ROUND_HALF_UP"+d); //2.23 四舍五入(若舍棄部分>=.5,就進(jìn)位)

6. ROUND_HALF_DOWN

BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);

System.out.println("ROUND_HALF_DOWN"+e);//2.22 四舍五入(若舍棄部分>.5,就進(jìn)位)

7. ROUND_HALF_EVEN

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(j);//2.22 如果舍棄部分左邊的數(shù)字為偶數(shù),則作  ROUND_HALF_DOWN
 
BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(k);//2.22 如果舍棄部分左邊的數(shù)字為奇數(shù),則作  ROUND_HALF_UP
 
 System.out.println("************************************");
 
 System.out.println("4.05: "+new BigDecimal("4.05").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.05: 4.0 down
 System.out.println("4.15: "+new BigDecimal("4.15").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.15: 4.2 up
 System.out.println("4.25: "+new BigDecimal("4.25").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.25: 4.2 down
 System.out.println("4.35: "+new BigDecimal("4.35").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.35: 4.4 up
 System.out.println("4.45: "+new BigDecimal("4.45").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.45: 4.4 down
 System.out.println("4.55: "+new BigDecimal("4.55").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.55: 4.6 up
 System.out.println("4.65: "+new BigDecimal("4.65").setScale(1, BigDecimal.ROUND_HALF_EVEN));//4.65: 4.6 down
 
 System.out.println("3.05: "+new BigDecimal("3.05").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.05: 3.0 down
 System.out.println("3.15: "+new BigDecimal("3.15").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.15: 3.2 up
 System.out.println("3.25: "+new BigDecimal("3.25").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.25: 3.2 down
 System.out.println("3.35: "+new BigDecimal("3.35").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.35: 3.4 up
 System.out.println("3.45: "+new BigDecimal("3.45").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.45: 3.4 down
 System.out.println("3.55: "+new BigDecimal("3.55").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.55: 3.6 up
 System.out.println("3.65: "+new BigDecimal("3.65").setScale(1, BigDecimal.ROUND_HALF_EVEN));//3.65: 3.6 down

8.ROUND_UNNECESSARY

?
1
2
3
4
BigDecimal l = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY);
System.out.println(l);
//斷言請(qǐng)求的操作具有精確的結(jié)果,因此不需要舍入。
//如果對(duì)獲得精確結(jié)果的操作指定此舍入模式,則拋出ArithmeticException。

補(bǔ)充知識(shí):BigDecimal中divide方法注意問(wèn)題

BigDecimal中divide方法拋異常:

Non-terminating decimal expansion; no exact representable decimal result

在使用

BigDecimal rate = new BigDecimal(1).divide(new BigDecimal(3));

時(shí)拋異常:

Non-terminating decimal expansion; no exact representable decimal result

原來(lái)是在做除法的時(shí)候出現(xiàn)了無(wú)限不循環(huán)小數(shù)如:0.333333333333

解決方案

在做做除法的時(shí)候指定保留的小數(shù)的位數(shù):

BigDecimal rate = new BigDecimal(1).divide(new BigDecimal(3), 6, BigDecimal.ROUND_HALF_UP);

以上這篇基于BigDecimal.setScale的用法小結(jié)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qq_39101581/article/details/78624617

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久电影午夜 | 变态女王麻麻小说在线阅读 | 亚洲欧美国产精品完整版 | 国产日本久久久久久久久婷婷 | 亚洲国产成人久久综合一区 | 色老板在线免费视频 | 97香蕉超级碰碰碰久久兔费 | 波多野结衣中文字幕乱七八糟 | 欧美bbb人妖 | 色人阁小说 | 亚洲精品日韩专区在线观看 | caoporen在线视频入口 | 国产资源一区 | 被黑人同学彻底征服全文小说阅读 | 香蕉国产成版人视频在线观看 | 久久91精品国产91久久户 | 日本剧情片在线播放中文版 | 欧美一级一级做性视频 | 99热免费在线 | 午夜dj影院在线视频观看完整 | 成人欧美一区二区三区白人 | 魔兽官方小说 | 精品亚洲国产一区二区 | 亚洲 欧美 偷自乱 图片 | 翁熄性放纵交换300章 | 99亚洲| 1024免费观看完整版在线播放 | 天作谜案免费完整版在线观看 | 日韩在线 在线播放 | 毛片免费视频观看 | 成年人在线观看视频免费 | 性的张力 | 成人男女啪啪免费观看网站 | 国产麻豆精品入口在线观看 | 四虎成人4hutv影院 | 亚洲精品成人456在线播放 | 齐天大性之七仙女欲春迅雷链接 | 黑人巨大初黑人解禁作品 | 久久婷婷五月综合色精品首页 | 色导行 | 东北老女人91p0rny |