1. 程式人生 > >浮點數精度控制方式總結(含mysql和java)

浮點數精度控制方式總結(含mysql和java)

我們應該經常會遇到浮點數的計算或者控制浮點數小數位數,這裡將工作中有可能會用到的一些控制浮點數精度的方法做出總結:
A.Mysql中的函式
format
format()函式會對小數部分超過指定位四捨五入,整數部分從右向左每3位一個逗號進行格式化輸出
這裡寫圖片描述
truncate(x,d)
整數位沒有逗號分隔,小數位超過指定位直接捨去,不四捨五入
這裡寫圖片描述
convert(expr,type);
convert()函式會對小數部分進行四捨五入操作,decimal(7,2)表示最終得到的結果整數部分位數加上小數部分位數小於等於7,小數部分位數2
這裡寫圖片描述
B. Java中對於數字的格式化方法


DecimalFormat(java.text包下)
DecimalFormat 是 NumberFormat 的一個具體子類,用於格式化十進位制數字,可以處理正數負數貨幣等等——api上有
這裡寫圖片描述

這裡寫圖片描述
NumberFormat(DecimalFormat的直接父類)
這裡寫圖片描述
myString = NumberFormat.getInstance().format(myNumber);
getInstance 或 getNumberInstance 來獲取常規數值格式。使用 getIntegerInstance 來獲取整數數值格式。使用 getCurrencyInstance 來獲取貨幣數值格式。使用 getPercentInstance 來獲取顯示百分比的格式。使用此格式,小數 0.53 將顯示為 53%

NumberFormat f=NumberFormat.getPercentInstance();
        f.setMinimumIntegerDigits(4);//設定整數位數——其他同理
        f.setMinimumFractionDigits(2);//設定小數位數——其他同理

這裡寫圖片描述
BigDecimal(一般使用該型別來表示金錢)
不可變的、任意精度的有符號十進位制數。BigDecimal 由任意精度的整數(非標度值) 和 32 位的整數標度 (scale—即小數位) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,BigDecimal 表示的數值是 (unscaledValue × 10-scale)
這裡寫圖片描述