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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(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教程 - DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說(shuō)明

DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說(shuō)明

2022-02-16 10:57Android濤 Java教程

這篇文章主要介紹了DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

先來(lái)介紹一下“0”和“#”的區(qū)別

1. 以“0”補(bǔ)位時(shí)

如果數(shù)字少了,就會(huì)補(bǔ)“0”,小數(shù)和整數(shù)都會(huì)補(bǔ);

如果數(shù)字多了,就切掉,但只切小數(shù)的末尾,整數(shù)不能切;

同時(shí)被切掉的小數(shù)位會(huì)進(jìn)行四舍五入處理。

2. 以“#”補(bǔ)位時(shí)

如果數(shù)字少了,則不處理,不會(huì)補(bǔ)“0”,也不會(huì)補(bǔ)“#”;

如果數(shù)字多了,就切掉,但只切小數(shù)的末尾,整數(shù)不能切;

同時(shí)被切掉的小數(shù)位會(huì)進(jìn)行四舍五入處理。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class PriceUtil {
    public static String decimalFormat(float value) {
        DecimalFormat decimalFormat;
        decimalFormat = new DecimalFormat();
        decimalFormat.applyPattern("0.##");
        return decimalFormat.format(value);
    }
 
    public static String decimalFormat(double value) {
        DecimalFormat decimalFormat;
        decimalFormat = new DecimalFormat();
        decimalFormat.applyPattern("0.##");
        return decimalFormat.format(value);
    }
 
    public static String decimalFormat(String value) {
        if(value==null||value.isEmpty())
            return "0.00";
        double d = Double.parseDouble(value);
        DecimalFormat decimalFormat;
        decimalFormat = new DecimalFormat();
        decimalFormat.applyPattern("0.##");
        return decimalFormat.format(d);
    }
}

小結(jié)一下

1. “0”強(qiáng)制按格式對(duì)齊,“#”最充足的情況下以這樣的格式對(duì)齊;

2. “#”適用的場(chǎng)景是當(dāng)小數(shù)位超過(guò)兩位時(shí),只顯示兩位,但只有一位或沒(méi)有,則不需要補(bǔ)“0”;

3. 整數(shù)位用多個(gè)“#”沒(méi)有意義。

大家想用什么樣的格式,可以自己去組裝。

DecimalFormat 數(shù)據(jù)四舍五入格式化處理

最近的開(kāi)發(fā)中,被測(cè)試的小伙伴告知,相同四舍五入處理邏輯的數(shù)據(jù)有一個(gè)有問(wèn)題。當(dāng)時(shí)的自己是懵逼的,我的處理方式是這樣的,業(yè)務(wù)要求是四舍五入保留兩位小數(shù):

?
1
2
DecimalFormat d = new DecimalFormat("#0.00");
d.format(0.145d);

這樣的數(shù)據(jù),期望結(jié)果是0.15,但是實(shí)際的結(jié)果是0.14,,,,,為什么呢?為什么呢?

問(wèn)題探索

對(duì)此,各種尋找原因,終于有點(diǎn)眉目,這里做大概的說(shuō)明,詳細(xì)的原因小伙伴們可以參考這篇文章

1.DecimalFormat 格式化數(shù)據(jù),如果不指定方式,默認(rèn)為HALF_EVEN,實(shí)際應(yīng)該是HALF_UP;(HALF_EVEN 被舍位是5(如保留兩位小數(shù)的2.115),后面還有非0值進(jìn)1(如保留兩位小數(shù)的2.11500001 格式化為2.12),5后面沒(méi)有數(shù)字或者都是0時(shí),前面是偶數(shù)則舍,是奇數(shù)則進(jìn)1,目標(biāo)是讓被舍前一位變?yōu)榕紨?shù)。HALF_UP:真正的四舍五入)

2. 使用BigDecimal時(shí),參數(shù)盡量傳入字符串,要比傳入double精準(zhǔn).因?yàn)閐ouble的精度容易丟失;

結(jié)果

為了不大幅度的改動(dòng)代碼,所以最后將數(shù)據(jù)格式化改為使用BigDecimal類型:

?
1
2
3
DecimalFormat d = new DecimalFormat("#0.00");
d.setRoundingMode(RoundingMode.HALF_UP);
Double.valueOf(d.format(new BigDecimal(String.valueOf(0.145d))));

因?yàn)闀r(shí)間問(wèn)題,描述的比較簡(jiǎn)單,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qq_40441190/article/details/85679760

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品99久久久 | 人生路不在线观看完整版 | www.男人的天堂| 2012中文字幕中字视频 | 久久精品中文字幕 | 日本免费精品视频 | a级毛片毛片免费很很综合 a级黄色视屏 | 91丝袜足控免费网站xx | 久草高清在线 | 免费人成在线观看视频播放 | 91精品国产综合久久消防器材 | 超时空要爱国语完整版在线 | 香蕉eeww99国产精选播放 | 91香蕉视频网址 | 91麻豆国产福利在线观看 | 成人国产在线视频 | 久久综合色超碰人人 | 亚洲精品www久久久久久 | 国产高清在线视频一区二区三区 | 亚洲国产精品综合一区在线 | 亚洲第一区在线观看 | 北岛玲在线视频 | 肥胖女人一级毛片 | a级片在线观看免费 | 五月色综合婷婷综合俺来也 | 成年人在线视频免费观看 | 国产亚洲精品一区在线播 | 免费看片黄色 | 我们中文在线观看免费完整版 | 91精品综合久久久久m3u8 | 99在线免费观看视频 | 秋霞理论最新三级理论最 | 99热国产在线 | freesex1718处xx| 吃大胸寡妇的奶 | 9久热久爱免费精品视频在线观看 | 欧美日韩久久中文字幕 | 亚洲国产成人精品无码区5566 | 五月最新商场女厕所高跟嘘嘘 | 亚洲视频中文字幕 | 波多野结衣52部合集在线观看 |