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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - DecimalFormat數字格式化 0和# 的區別及說明

DecimalFormat數字格式化 0和# 的區別及說明

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

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

先來介紹一下“0”和“#”的區別

1. 以“0”補位時

如果數字少了,就會補“0”,小數和整數都會補;

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

同時被切掉的小數位會進行四舍五入處理。

2. 以“#”補位時

如果數字少了,則不處理,不會補“0”,也不會補“#”;

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

同時被切掉的小數位會進行四舍五入處理。

?
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);
    }
}

小結一下

1. “0”強制按格式對齊,“#”最充足的情況下以這樣的格式對齊;

2. “#”適用的場景是當小數位超過兩位時,只顯示兩位,但只有一位或沒有,則不需要補“0”;

3. 整數位用多個“#”沒有意義。

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

DecimalFormat 數據四舍五入格式化處理

最近的開發中,被測試的小伙伴告知,相同四舍五入處理邏輯的數據有一個有問題。當時的自己是懵逼的,我的處理方式是這樣的,業務要求是四舍五入保留兩位小數:

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

這樣的數據,期望結果是0.15,但是實際的結果是0.14,,,,,為什么呢?為什么呢?

問題探索

對此,各種尋找原因,終于有點眉目,這里做大概的說明,詳細的原因小伙伴們可以參考這篇文章

1.DecimalFormat 格式化數據,如果不指定方式,默認為HALF_EVEN,實際應該是HALF_UP;(HALF_EVEN 被舍位是5(如保留兩位小數的2.115),后面還有非0值進1(如保留兩位小數的2.11500001 格式化為2.12),5后面沒有數字或者都是0時,前面是偶數則舍,是奇數則進1,目標是讓被舍前一位變為偶數。HALF_UP:真正的四舍五入)

2. 使用BigDecimal時,參數盡量傳入字符串,要比傳入double精準.因為double的精度容易丟失;

結果

為了不大幅度的改動代碼,所以最后將數據格式化改為使用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))));

因為時間問題,描述的比較簡單,以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲成人伦理 | 韩国三级在线高速影院 | 国产成人性毛片aaww | 美女被吸乳得到大胸 | 久久电影精品久久99久久 | 精品视频一区二区观看 | 国产婷婷成人久久av免费高清 | 久久re热在线视频精6 | 亚洲国产精品一区二区三区久久 | 国产我不卡 | 亚洲成人视屏 | 操老肥熟| 亚洲福利电影一区二区? | 国产无限制自拍 | 日韩制服丝袜在线观看 | 日韩一区二区三区四区不卡 | 婷婷色天使在线视频观看 | 草莓视频幸福宝 | 男人搡女人视频免费看 | 欧美日韩精品一区二区三区视频播放 | 日韩不卡一区二区三区 | 脱女学小内内摸出水网站免费 | 疯狂激吻添下边小说 | 桃花岛在线 | 特黄级| 国产专区亚洲欧美另类在线 | 亚洲精品精品一区 | 学校女性奴sm训练调教 | 9420高清视频在线观看网百度 | 青青草在视线频久久 | juliaann厨房大战| avtt在线观看| 欧美18-19sex性处 | 日韩欧美国产成人 | 5g影院天天影院天天爽影院网站 | 欧美一级欧美三级 | 娇小8一12xxxx第一次 | 校服下的白嫩小乳尖h1v1 | 丁香六月色 | 黑人性xxxⅹxxbbbbb | 欧美3d怪物交videos网站 |