<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
當小數位很多的時候,小數位後面可能有一些多餘的0並沒有任何實際意義。所以在某些業務需求下可以去掉這些多餘的0。例如:0.2000可以用0.2來表示。
/** * 去掉給定字串(小數)後面的無效0 * * @param value 小數的字串表示 * @return 如果轉換失敗,返回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; }
當使用正則匹配的時候,需要程式碼中的兩種正規表示式來進行匹配判斷組合。第一種正規表示式用來匹配小數點後面全是0的值,例如122.000。第二種正規表示式用來匹配小數點後面存在非0數值的值,例如109.00200。
上述方法支援正數和負數的處理
在正規表示式中,使用分組的方式來實現,在正則匹配過程中,將要保留的部分放在第一個括號中,即組1,那麼最終獲取值的時候,就可以使用group(1)直接拿到
關於兩個表示式:
表示式1:^(-?d*)(.?0*)$:
-?:正負數的匹配均支援
d*:0個到n個數位,即匹配整數部分
到這裡,小數點前面部分就匹配完了,所以前面的部分可以作為第一組
.?:可以匹配0個或1個小數點
0*:可以匹配0個或1個數值0
第二個分組可有可無。因為表示式1主要使用用來識別出無小數點或者是小數點後面是若干個0的格式
表示式2:^(-?d*.d*[1-9])(0*)$:
-?:正負數的匹配均支援
d*:0個到n個數位,即匹配整數部分
.:匹配小數點
d*[1-9]:匹配小數部分,因為表示式2的目的是匹配小數點後面存在非0數值。那麼[1-9]就是用來匹配最後一個非0數值的
(0*) $:如果最後一個為是非0數值,那麼不會匹配到任何。如果最後一位是0,那麼這裡匹配到的就是最後一個非0數值後面的所有0
/** * 通過將字串(小數)轉換為decimal * @param value 小數的字串表示 * @return */ public String convertByBigDecimal(String value) { BigDecimal bigDecimal = new BigDecimal(value); BigDecimal bigDecimal1 = bigDecimal.stripTrailingZeros(); return bigDecimal1.toPlainString(); }
上述方法是將字串轉換為BigDecimal ,然後使用BigDecimal 原生方法stripTrailingZeros來去掉後面的無效0。同樣的正負數均支援
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); } }
結果輸出:
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
上述兩種方法都可以實現我們的需求,但是從效能上面來講,如果需要解析大量資料的時候,建議使用第一種,Pattern.compile(regex)可以是一個全域性的,不需要每一條資料都範例化
到此這篇關於Java去掉小數點後面無效0的文章就介紹到這了,更多相關Java去掉小數點後面無效0內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45