欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java去掉小數(shù)點后面無效0的方案與建議

 更新時間:2022年07月05日 16:55:49   作者:安一缸  
當(dāng)前小數(shù)點后面的位數(shù)過多的時候,多余的0沒有實際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點后面無效0的方案與建議,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一:需求

當(dāng)小數(shù)位很多的時候,小數(shù)位后面可能有一些多余的0并沒有任何實際意義。所以在某些業(yè)務(wù)需求下可以去掉這些多余的0。例如:0.2000可以用0.2來表示。

二:方案

2.1 正則匹配

/**
     * 去掉給定字符串(小數(shù))后面的無效0
     *
     * @param value 小數(shù)的字符串表示
     * @return 如果轉(zhuǎn)換失敗,返回null
     */
    public String convertByPattern(String value) {

        String regex = "^(-?\\d*)(\\.?0*)$";
        Matcher matcher = Pattern.compile(regex).matcher(value);
        if (matcher.find()) {
            return matcher.group(1);
        }
        String regex1 = "^(-?\\d*\\.\\d*[1-9])(0*)$";
        Matcher matcher1 = Pattern.compile(regex1).matcher(value);
        if (matcher1.find()) {
            return matcher1.group(1);
        }
        return null;
    }

當(dāng)使用正則匹配的時候,需要代碼中的兩種正則表達式來進行匹配判斷組合。第一種正則表達式用來匹配小數(shù)點后面全是0的值,例如122.000。第二種正則表達式用來匹配小數(shù)點后面存在非0數(shù)值的值,例如109.00200。

上述方法支持正數(shù)和負(fù)數(shù)的處理

在正則表達式中,使用分組的方式來實現(xiàn),在正則匹配過程中,將要保留的部分放在第一個括號中,即組1,那么最終獲取值的時候,就可以使用group(1)直接拿到

關(guān)于兩個表達式:

表達式1:^(-?\d*)(\.?0*)$:

  -?:正負(fù)數(shù)的匹配均支持

  \d*:0個到n個數(shù)字,即匹配整數(shù)部分

  到這里,小數(shù)點前面部分就匹配完了,所以前面的部分可以作為第一組

  \.?:可以匹配0個或1個小數(shù)點

  0*:可以匹配0個或1個數(shù)值0

  第二個分組可有可無。因為表達式1主要使用用來識別出無小數(shù)點或者是小數(shù)點后面是若干個0的格式

表達式2:^(-?\d*\.\d*[1-9])(0*)$:

  -?:正負(fù)數(shù)的匹配均支持

  \d*:0個到n個數(shù)字,即匹配整數(shù)部分

  \.:匹配小數(shù)點

  \d*[1-9]:匹配小數(shù)部分,因為表達式2的目的是匹配小數(shù)點后面存在非0數(shù)值。那么[1-9]就是用來匹配最后一個非0數(shù)值的

  (0*) $:如果最后一個為是非0數(shù)值,那么不會匹配到任何。如果最后一位是0,那么這里匹配到的就是最后一個非0數(shù)值后面的所有0

2.2 BigDecimal

 /**
     * 通過將字符串(小數(shù))轉(zhuǎn)換為decimal
     * @param value 小數(shù)的字符串表示
     * @return
     */
    public String convertByBigDecimal(String value) {
        BigDecimal bigDecimal = new BigDecimal(value);
        BigDecimal bigDecimal1 = bigDecimal.stripTrailingZeros();
        return bigDecimal1.toPlainString();
    }

上述方法是將字符串轉(zhuǎn)換為BigDecimal ,然后使用BigDecimal 原生方法stripTrailingZeros來去掉后面的無效0。同樣的正負(fù)數(shù)均支持

三:測試

 public static void main(String[] args) {
        /**
         * (-)100
         * (-)123
         * (-)123.0000
         * (-)100.0000
         * (-)123.0
         * (-)100.0
         * (-)123.0900
         * (-)100.0900
         * (-)123.0009
         * (-)100.0009
         */
        List<String> strings = Arrays.asList("100", "-100",
                "123", "-123",
                "123.0000", "-123.0000",
                "100.0000", "-100.0000",
                "123.0", "-123.0",
                "100.0", "-100.0",
                "123.0900", "-123.0900",
                "100.0900", "-100.0900",
                "123.0009", "-123.0009",
                "100.0009", "-100.0009");
        for (String value : strings) {
            String s = new ZeroFormatTest2().convertByPattern(value);
            String s1 = new ZeroFormatTest2().convertByBigDecimal(value);
            System.out.println(s + "----" + s1);
        }
    }

結(jié)果輸出:

100----100
-100-----100
123----123
-123-----123
123----123
-123-----123
100----100
-100-----100
123----123
-123-----123
100----100
-100-----100
123.09----123.09
-123.09-----123.09
100.09----100.09
-100.09-----100.09
123.0009----123.0009
-123.0009-----123.0009
100.0009----100.0009
-100.0009-----100.0009

四:建議

上述兩種方法都可以實現(xiàn)我們的需求,但是從性能上面來講,如果需要解析大量數(shù)據(jù)的時候,建議使用第一種,Pattern.compile(regex)可以是一個全局的,不需要每一條數(shù)據(jù)都實例化

到此這篇關(guān)于Java去掉小數(shù)點后面無效0的文章就介紹到這了,更多相關(guān)Java去掉小數(shù)點后面無效0內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java動態(tài)規(guī)劃之丑數(shù)問題實例講解

    Java動態(tài)規(guī)劃之丑數(shù)問題實例講解

    這篇文章主要介紹了Java動態(tài)規(guī)劃之丑數(shù)問題實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • 深入了解Spring的事務(wù)傳播機制

    深入了解Spring的事務(wù)傳播機制

    Spring事務(wù)傳播機制是指,包含多個事務(wù)的方法在相互調(diào)用時,事務(wù)是如何在這些方法間傳播的。本文通過示例詳細(xì)介紹了Spring的事務(wù)傳播機制,需要的可以參考一下
    2022-09-09
  • Java中SimpleDateFormat方法超詳細(xì)分析

    Java中SimpleDateFormat方法超詳細(xì)分析

    這篇文章主要給大家介紹了關(guān)于Java中SimpleDateFormat方法超詳細(xì)分析的相關(guān)資料,SimpleDateFormat 是一個以國別敏感的方式格式化和分析數(shù)據(jù)的具體類,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • springboot整合cxf發(fā)布webservice以及調(diào)用的方法

    springboot整合cxf發(fā)布webservice以及調(diào)用的方法

    這篇文章主要介紹了springboot整合cxf發(fā)布webservice以及調(diào)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • springcloud-gateway集成knife4j的示例詳解

    springcloud-gateway集成knife4j的示例詳解

    這篇文章主要介紹了springcloud-gateway集成knife4j的示例詳解,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • java實現(xiàn)簡單解析XML文件功能示例

    java實現(xiàn)簡單解析XML文件功能示例

    這篇文章主要介紹了java實現(xiàn)簡單解析XML文件功能,結(jié)合實例形式分析了java針對xml文件的讀取、遍歷節(jié)點及輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Eclipse中使用Maven創(chuàng)建Java Web工程的實現(xiàn)方式

    Eclipse中使用Maven創(chuàng)建Java Web工程的實現(xiàn)方式

    這篇文章主要介紹了Eclipse中使用Maven創(chuàng)建Java Web工程的實現(xiàn)方式的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的方式,需要的朋友可以參考下
    2017-10-10
  • mybatis中使用大于小于等于的正確方法

    mybatis中使用大于小于等于的正確方法

    在mybatis中sql是寫在xml映射文件中的,如果sql中有一些特殊字符的話,在解析xml文件的時候就會被轉(zhuǎn)義,下面我們就一起來看一下大于小于等于是怎么轉(zhuǎn)義的
    2021-04-04
  • IDEA?下?Gradle?刪除多余無用依賴的處理方法

    IDEA?下?Gradle?刪除多余無用依賴的處理方法

    這篇文章主要介紹了IDEA下Gradle刪除多余無用依賴,使用該插件可以一定程度上幫助我們刪除無用依賴,但是也可能會多刪除有用的依賴,需要在使用插件自動修復(fù)后手動檢測項目,驗證是否會出現(xiàn)問題,避免導(dǎo)致上線發(fā)布錯誤的負(fù)優(yōu)化
    2022-03-03
  • Java面試題解析之判斷以及防止SQL注入

    Java面試題解析之判斷以及防止SQL注入

    這篇文章主要介紹了Java面試題解析之判斷以及防止SQL注入,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論