BigDecimal 去掉多餘的零

来源:https://www.cnblogs.com/xiondun/archive/2023/03/27/17263264.html
-Advertisement-
Play Games

一.去除0的方法 BigDecimal是處理高精度的浮點數運算的常用的一個類 當需要將BigDecimal中保存的浮點數值列印出來,特別是在頁面上顯示的時候,就有可能遇到預想之外的科學技術法表示的問題。 一般直接使用 BigDecimal.toString()方法即可以完成浮點數的列印。 如: Sy ...


一.去除0的方法

BigDecimal是處理高精度的浮點數運算的常用的一個類
當需要將BigDecimal中保存的浮點數值列印出來,特別是在頁面上顯示的時候,就有可能遇到預想之外的科學技術法表示的問題。
一般直接使用 BigDecimal.toString()方法即可以完成浮點數的列印。
如:
System.out.println( new BigDecimal("10000000000").toString());
但是,toString()方法輸出的字元串並不能保證不是科學計數法。
不過在日常的使用中,用toString()方法輸出的就是普通的數字字元串而非科學計數法。
直接這麼寫:
System.out.println( new BigDecimal("100.000").toString());
程式的輸出即為: 100.000
如果我們希望去除末尾多餘的0,那麼我們應該這麼寫:
System.out.println( new BigDecimal("100.000").stripTrailingZeros().toString());
其中,stripTrailingZeros()函數就是用於去除末尾多餘的0的,但是此時程式的輸出為: 1E+2
是科學計數法,可能並不是我們想要的。
解決的方法很簡單,如果想要避免輸出科學計數法的字元串,我們要用toPlainString()函數代替toString()。如:
System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());
此時程式的輸出就為 100

二.添加註解統一處理

使用@JsonSerialize輸出
1.創建一個BigDecimal格式化工具

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
 
import java.io.IOException;
import java.math.BigDecimal;
public class BigDecimalSerialize extends JsonSerializer<BigDecimal> {
  @Override
  public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
    if (value != null && !"".equals(value)) {
      gen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_DOWN) + "");
    } else {
      gen.writeString(value + "");
    }
  }
}

2.在返回的實體類對應的屬性上加上註解:

@JsonSerialize(using = BigDecimalSerialize.class)
 private BigDecimal totalCost;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mounted: () { this.getList('', (data) => { console.log(data); }) } methods: { getList (condition) { get_list({...condition}).then(res => { if (res.dat ...
  • 在Vue $mount過程中,我們需要把模版編譯成render函數,整體實現可以分為三部分: parse、optimize、codegen。 ...
  • 1. 響應式編程 1.1. 使用基於事件的範式處理非同步數據流 1.2. 和非同步編程提供了相同的性能優勢 1.3. 能夠擴展程式(特別是擴展I/O)以處理很多連接和數據源 2. 非阻塞I/O 2.1. 有效擴展伺服器的基礎 2.2. 允許伺服器用相對較少的線程處理相對較多的連接 2.2.1. 傳統的服 ...
  • 關於商業認知 2022 年復盤了過去幾年的項目經歷:很多項目商業都沒開始就死了,能商業化閉環 & 能持續一段時間的一隻手數量都沒有。 從 2022 年幾個月陸續復盤中,收穫了不少商業相關心得: 心得:一定要選合適自己方向的項目 以前我對戰略、方向的思考是極少的,很容易陷入達克效應(鄧寧-克魯格效應) ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 大家好,我是大彬~ 今天給大家分 ...
  • 使用 VLD 記憶體泄漏檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 配置文件中配置項 MaxDataDump 的使用方法。 ...
  • 在現在的日常開發中,不管前端還是後端,JSON 格式的數據是用得比較多的,甚至可以說無處不在。在某些業務場景下也是需要用到 JSON 的,特別是 JSON 與 Java 對象之間的轉化。 ...
  • 本文已經收錄到Github倉庫,該倉庫包含電腦基礎、Java基礎、多線程、JVM、資料庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散式、微服務、設計模式、架構、校招社招分享等核心知識點,歡迎star~ Github地址 今天來熟悉一下,關於JVM調優常 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...