1. 程式人生 > 其它 >數字去除尾巴多餘的零,且至少保留兩位小數

數字去除尾巴多餘的零,且至少保留兩位小數

技術標籤:Java

背景:

近期做開發時遇到的一個數字格式轉換問題,mysql裡金額,數字欄位,型別都是decimal(16,8),返給前端格式:
1:去掉小數尾巴多餘的0,如12.345000->12.345
2:至少保留2位小數,如12.345->12.345,12,34->12.34,12.3->12.30,12->12.00
網上查詢方法,發現多是部分格式處理方案,無法解決問題,故自寫全,記錄於此,它日或再有用。

    /**
     * @Description 數字處理(小數後多餘的0去掉,小數位至少兩位,不足2位0來補齊)
     * @Author Luffy
     * @Date 2021/01/18
     */
public static String delEndZeroAndKeepLeast2Point(String formatNumber) { String finalNumber = ""; if(UtilValidate.isNotEmpty(formatNumber)) { finalNumber = new BigDecimal(formatNumber).stripTrailingZeros().toPlainString(); //如果小數位數<=2位,則保留2位(沒2位則0補齊) 13.13526 8-2-1 13.1 4-2-1
if(finalNumber.length()-finalNumber.indexOf(".")<=2) { finalNumber = new DecimalFormat("#.00").format(Double.valueOf(finalNumber)); } //如果沒小數點 if(finalNumber.indexOf(".")==-1) { finalNumber =
new BigDecimal(finalNumber).setScale(2).toString(); } } return finalNumber; }

附記常見數字保留2位的處理方式:

方式一:
四捨五入  
double   f   =   111231.5585;  
BigDecimal   b   =   new   BigDecimal(f);  
double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
保留兩位小數  
---------------------------------------------------------------  

方式二:
java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format("欲格式化的數字");

例:new java.text.DecimalFormat("#.00").format(3.1415926)
#.00 表示兩位小數 #.0000四位小數 以此類推...

方式三:
double d = 3.1415926;
String result = String .format("%.2f");
%.2f %. 表示 小數點前任意位數   2 表示兩位小數 格式後的結果為f 表示浮點型

方式四:
NumberFormat ddf1=NumberFormat.getNumberInstance() ;
void setMaximumFractionDigits(int digits)
df.format("欲格式化的數字");
digits 顯示的數字位數
為格式化物件設定小數點後的顯示的最多位,顯示的最後位是舍入的