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型別
- 使用紋理的RGBA通道儲存float型別數值型別
- CSS中的float和margin的混合使用CSS
- python中分辨int和float的差別Python
- Java深海拾遺系列(5)--- 精度計算中的BigDecimal,double和floatJavaDecimal
- decimal,float和double的區別是什麼?Decimal
- PHP 對 float 型別使用 JSON_encode () 精度缺失PHP型別JSON
- PHP基礎-資料型別-floatPHP資料型別
- ☕【Java實戰系列】「技術盲區」Double與Float的坑與解決辦法以及BigDecimal的取而代之!JavaDecimal
- position和float
- float double 型別資料極值表示型別
- float和double有什麼區別?
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- BOOL,int,float,指標型別的變數a 與“零”的比較語句指標型別變數
- c語言中%f輸出double型和float型值C語言
- CSS 中的 float、BFC、position 和 inline-blockCSSinlineBloC
- Python如何保留float型別小數點後3位Python型別
- 又踩坑了!BigDecimal使用的5個坑!Decimal
- 給內聯元素加float與給塊元素加float有什麼區別?
- float浮動的詳細總結
- float,absolute脫離文件流的總結
- Django程式碼中的TypeError 'float' object is not callableDjangoErrorObject
- python函式每日一講 - float函式型別轉換詳解Python函式型別
- CSS float 浮動CSS
- CSS float浮動CSS
- CSS浮動(float)CSS
- C/C++_int/float/double的最大值和最小值C++
- 一個比較float是否相等的工具類
- web前端css定位position和起浮floatWeb前端CSS
- 走進 JDK 之 FloatJDK
- CSS之浮動FloatCSS
- Oracle實驗(04):floatOracle
- [譯] Ruby 2.6 增加了 Integer 和 Float 方法的異常引數
- 關於CSS中的float可能出現的小問題CSS
- BigDecimal轉為String型別、int型別Decimal型別
- c++中幾種常見的型別轉換。int與string的轉換,float與string的轉換以及string和long型別之間的相互轉換。to_string函式的實現和應用。C++型別函式
- Java 浮點數精確性探討(IEEE754 / double / float)與 BigDecimal 解決方案JavaDecimal
- css佈局-float佈局CSS
- float與byte[]互相轉換