數字去除尾巴多餘的零,且至少保留兩位小數
阿新 • • 發佈:2021-01-19
技術標籤: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 顯示的數字位數
為格式化物件設定小數點後的顯示的最多位,顯示的最後位是舍入的