Float型別*100的坑 (BigDecimal 的使用)和float形的格式化
近日,做專案的時候處理一個Float型別的資料,因為要顯示成 % 的形式,直接*100 的話出現了精度丟失問題。就像這樣:
這個時候我們就是需要使用BigDecimal 類了
下面的方法就可以:
BigDecimal re1=new BigDecimal(Float.toString(0.142f));
BigDecimal re2=new BigDecimal(Float.toString(100.00f));
System.out.println(re1.multiply(re2).floatValue());
下面具體介紹下這個類:
BigDecimal一共有4個構造方法
BigDecimal(int) 建立一個具有引數所指定整數值的物件。
BigDecimal(double) 建立一個具有引數所指定雙精度值的物件。
BigDecimal(long) 建立一個具有引數所指定長整數值的物件。
BigDecimal(String) 建立一個具有引數所指定以字串表示的數值的物件。
BigDecimal 的運算方式 不支援 + - * / 這類的運算 它有自己的運算方法
BigDecimal add(BigDecimal augend) 加法運算
BigDecimal subtract(BigDecimal subtrahend) 減法運算
BigDecimal multiply(BigDecimal multiplicand) 乘法運算
BigDecimal divide(BigDecimal divisor) 除法運算
格式化(貨幣,百分比 的用法)
<span style="white-space:pre"> </span>BigDecimal bigLoanAmount = new BigDecimal("12.11"); //建立BigDecimal物件
BigDecimal bigInterestRate = new BigDecimal("23.15");
BigDecimal bigInterest = bigLoanAmount.multiply(bigInterestRate); //BigDecimal運算
NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立貨幣格式化引用
NumberFormat percent = NumberFormat.getPercentInstance(); //建立百分比格式化用
percent.setMaximumFractionDigits(3); //百分比小數點最多3位
//利用BigDecimal物件作為引數在format()中呼叫貨幣和百分比格式化
System.out.println("Loan amount:\t" + currency.format(bigLoanAmount));
System.out.println("Interest rate:\t" + percent.format(bigInterestRate));
System.out.println("Interest:\t" + currency.format(bigInterest));
小數位的取值,其他位的舍入
BigDecimal a=
new
BigDecimal(
"1.35"
);
對數值取值:
1
.a.getScale(
1
,BigDecimal.ROUND_DOWN);
取一位小數,直接刪除後面多餘位數,故取值
1.3
.
2
.a.getScale(
1
,BigDecimal.ROUND_UP);
取一位小數,刪除後面位數,進一位,故取值
1.4
.
3
.a.getScale(
1
,BigDecimal.ROUND_HALF_UP);
取一位小數,四捨五入,故取值
1.4
.
4
.a.getScale(
1
,BigDecimal.ROUND_HALF_DOWN);
取一位小數,四捨五入,但是
5
也是捨棄,故取值
1.3
.
BigDecimal 轉double型別
使用BigDecimal.doubleValue()的方法
float的格式化
上面說的BigDecimal可以對Float格式化,還可以使用new DecimalFormat("##0.00").format(.01); 這個格式化之後就是 0.01
相關文章
- java double、float型別的比較Java型別
- 關於MYSQL中FLOAT和DOUBLE型別的儲存MySql型別
- CSS中float和Clear的使用CSS
- decimal(numeric )、float 和 real 資料型別的區別Decimal資料型別
- CSS中的float和margin的混合使用CSS
- float與position的使用
- float型別最大值和最小值型別
- Java深海拾遺系列(5)--- 精度計算中的BigDecimal,double和floatJavaDecimal
- python中分辨int和float的差別Python
- decimal,float和double的區別是什麼?Decimal
- PHP基礎-資料型別-floatPHP資料型別
- position和float
- ☕【Java實戰系列】「技術盲區」Double與Float的坑與解決辦法以及BigDecimal的取而代之!JavaDecimal
- float和double有什麼區別?
- PHP 對 float 型別使用 JSON_encode () 精度缺失PHP型別JSON
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- BOOL,int,float,指標型別的變數a 與“零”的比較語句指標型別變數
- css定位中position:absolute與float的區別CSS
- c語言中%f輸出double型和float型值C語言
- Java浮點數float,bigdecimal和double精確計算的精度誤差問題總結JavaDecimal
- JSON unmarshal float型別怎麼保持JSON一樣的資料JSON型別
- 【PL/SQL】IEEE浮點型別BINARY_FLOAT和BINARY_DOUBLESQL型別
- int float double 各型別的最大值最小值型別
- Python如何保留float型別小數點後3位Python型別
- 又踩坑了!BigDecimal使用的5個坑!Decimal
- float浮動的詳細總結
- CSS 中的 float、BFC、position 和 inline-blockCSSinlineBloC
- 準確詳解:C/C++ float、double資料型別的表示範圍及精度C++資料型別
- PLSQL Language Reference-針對BINARY_FLOAT和BINARY_DOUBLE的額外PL/SQL子型別SQL型別
- CSS float浮動CSS
- CSS float 浮動CSS
- CSS浮動(float)CSS
- float datatype in Oracle databaseOracleDatabase
- float,absolute脫離文件流的總結
- float計算不準確的替代方法
- javascript使用style方式如何設定和獲取元素的float浮動屬性JavaScript
- Python 四種數值型別(int,long,float,complex)區別及轉換Python型別
- python函式每日一講 - float函式型別轉換詳解Python函式型別