1. 程式人生 > >BigDecimal除法後保留兩位小數

BigDecimal除法後保留兩位小數

  1. BigDecimal numBigDecimal=new BigDecimal(5.33);  
  2. numBigDecimal=ConvertNumber(numBigDecimal,3,2);//呼叫,5.33/3後保留兩位小數1.7766666=1.78
  1. //BigDecimal 擷取小數位,四捨五入
  2.     public BigDecimal ConvertNumber(BigDecimal bigDecimal,int divnum,int num){  
  3.         double a=bigDecimal.doubleValue();  
  4.         a=a/divnum;  
  5.         String numString="0."
    ;  
  6.         for(int i=0;i<num;i++){  
  7.             numString+="0";  
  8.         }  
  9.         DecimalFormat df=new DecimalFormat(numString);   
  10.         returnnew BigDecimal(df.format(a).toString());  
  11.     }  

當bigdecimal除不盡(迴圈小數)後會報錯,上面的是一種解決方法,下面的是BigDecimal ,divide方法提供的精確小數方法(推薦使用)

  1. @Test
  2.     publicvoid Testa(){  
  3.         String currentLat2 = "2.455675";  
  4.         BigDecimal   b   =   new   BigDecimal(currentLat2);  
  5.         b=b.divide(new BigDecimal(3),2,BigDecimal.ROUND_HALF_UP);  
  6.         System.out.println(b);  
  7.     }//輸出是0.82
  1. BigDecimal.setScale();//用於格式化小數點   
  2. setScale(1);//表示保留以為小數,預設用四捨五入方式   
  3. setScale(1,BigDecimal.ROUND_DOWN);//直接刪除多餘的小數位,如2.35會變成2.3   
  4. setScale(1,BigDecimal.ROUND_UP);//進位處理,2.35變成2.4   
  5. setScale(1,BigDecimal.ROUND_HALF_UP);//四捨五入,2.35變成2.4  
  6. setScaler(1,BigDecimal.ROUND_HALF_DOWN);//四捨五入,2.35變成2.3,如果是5則向下舍  
詳細描述(參考http://www.bdqn.cn/news/201311/11834.shtml):
  1. 1、ROUND_UP  
  2. 舍入遠離零的舍入模式。  
  3. 在丟棄非零部分之前始終增加數字(始終對非零捨棄部分前面的數字加1)。  
  4. 注意,此舍入模式始終不會減少計算值的大小。  
  5. 2、ROUND_DOWN  
  6. 接近零的舍入模式。  
  7. 在丟棄某部分之前始終不增加數字(從不對捨棄部分前面的數字加1,即截短)。  
  8. 注意,此舍入模式始終不會增加計算值的大小。  
  9. 3、ROUND_CEILING  
  10. 接近正無窮大的舍入模式。  
  11. 如果 BigDecimal 為正,則舍入行為與 ROUND_UP 相同;  
  12. 如果為負,則舍入行為與 ROUND_DOWN 相同。  
  13. 注意,此舍入模式始終不會減少計算值。  
  14. 4、ROUND_FLOOR  
  15. 接近負無窮大的舍入模式。  
  16. 如果 BigDecimal 為正,則舍入行為與 ROUND_DOWN 相同;  
  17. 如果為負,則舍入行為與 ROUND_UP 相同。  
  18. 注意,此舍入模式始終不會增加計算值。  
  19. 5、ROUND_HALF_UP  
  20. 向“最接近的”數字舍入,如果與兩個相鄰數字的距離相等,則為向上舍入的舍入模式。  
  21. 如果捨棄部分 >= 0.5,則舍入行為與 ROUND_UP 相同;否則舍入行為與 ROUND_DOWN 相同。  
  22. 注意,這是我們大多數人在小學時就學過的舍入模式(四捨五入)。  
  23. 6、ROUND_HALF_DOWN  
  24. 向“最接近的”數字舍入,如果與兩個相鄰數字的距離相等,則為上舍入的舍入模式。  
  25. 如果捨棄部分 > 0.5,則舍入行為與 ROUND_UP 相同;否則舍入行為與 ROUND_DOWN 相同(五舍六入)。  
  26. 7、ROUND_HALF_EVEN  
  27. 向“最接近的”數字舍入,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。  
  28. 如果捨棄部分左邊的數字為奇數,則舍入行為與 ROUND_HALF_UP 相同;  
  29. 如果為偶數,則舍入行為與 ROUND_HALF_DOWN 相同。  
  30. 注意,在重複進行一系列計算時,此舍入模式可以將累加錯誤減到最小。  
  31. 此舍入模式也稱為“銀行家舍入法”,主要在美國使用。四捨六入,五分兩種情況。  
  32. 如果前一位為奇數,則入位,否則捨去。  
  33. 以下例子為保留小數點1位,那麼這種舍入方式下的結果。  
  34. 1.15>1.2 1.25>1.2  
  35. 8、ROUND_UNNECESSARY  
  36. 斷言請求的操作具有精確的結果,因此不需要舍入。  
  37. 如果對獲得精確結果的操作指定此舍入模式,則丟擲ArithmeticException。  
直接用數字轉換為BigDecimal時會出現不精確的數值:
  1. BigDecimal  e   =   new   BigDecimal(2.2);   
  2.         System.out.println("e:"+e);    
  3.         BigDecimal  f   =   new   BigDecimal(3.32);   
  4.         System.out.println("f:"+f);    
  5.         System.out.println("e+f="+e.add(f));  
  6.         /* 
  7.         e:2.20000000000000017763568394002504646778106689453125 
  8.         f:3.319999999999999840127884453977458178997039794921875 
  9.         e+f=5.520000000000000017763568394002504646778106689453125 
  10.          */
數字轉換為字串後再轉換為BigDecimal時後計算則是精確的數值(所以先轉換為字串後再轉BigDecimal會得到精確的結果):
  1. BigDecimal  e   =   new   BigDecimal("2.2");   
  2.         System.out.println("e:"+e);    
  3.         BigDecimal  f   =   new   BigDecimal("3.32");   
  4.         System.out.println("f:"+f);    
  5.         System.out.println("e+f="+e.add(f));  
  6.         /*  結果如下: 
  7.         e:2.2 
  8.         f:3.32 
  9.         e+f=5.52 
  10.          */

相關推薦

BigDecimal除法保留小數

BigDecimal numBigDecimal=new BigDecimal(5.33);  numBigDecimal=ConvertNumber(numBigDecimal,3,2);//呼叫,5.33/3後保留兩位小數1.7766666=1.78//BigDecima

C# 小數點保留小數,四捨五入的函式及使用方法

1 Math.Round(45.367,2) //Returns 45.37 2 Math.Round(45.365,2) //Returns 45.36  C#中的Round()不是我們中國人理解的四捨五入,是老外的四捨五入,是符合IEEE標準的四

java 除法結果保留小數小數保留前導零

  DecimalFormat df1 = new DecimalFormat(“0.0″); //保留1位小數,帶前導零 DecimalFormat df2 = new DecimalFormat(“#.#”); //保留1位小數,可以不帶前導零 DecimalForma

java BigDecimal加法/減法/乘法/除法 保留小數

1.BigDecimal類概述及其構造方法   由於在運算的時候,float型別和double型別很容易丟失進度,所以,為了能夠精確的表示、計算浮點數,java提供了BigDecimal類   BigDecimal類是不可變得、任意精度的有符號是進位制數 2.構造方法及成

BigDecimal的用法詳解(保留小數,四舍五入,數字格式化,科學計數法轉數字,數字裏的逗號處理)

intvalue tom 引用 方法 mda ubi 結果 oid 創建 一、簡介 Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變量doubl

BigDecimal保留小數,或指定精確的位數

floor set spa 函數 情況 println AD ring out public static void main(String[] args) { BigDecimal t1 = new BigDecimal("3.15289");

BigDecimal 保留小數

DecimalFormat df = new DecimalFormat("#.00"); System.out.println("df.format(26.36541):" + df.format(26.36541)); BigDecimal b2 = new BigDecimal("20

sql sql計算除法保留小數sql中分母為零處理

1  select   d.name, case when SUM(a.grid_capacity)=0 then 0 else ROUND(SUM(c.year_power)/SUM(a.grid_capacity), 2)   end as 'hours',

ACMNO.14一球從M米高度自由下落,每次落地返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米

題目描述 一球從M米高度自由下落,每次落地後返回原高度的一半,再落下。 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數 輸入 M N 輸出 它在第N次落地時反彈多高?共經過多少米? 保留兩位小數,空格隔開,放在一行 樣例輸入 1000 5

Java BigDecimal使用 Java BigDecimal詳解 BigDecimal的用法詳解(保留小數,四捨五入,數字格式化,科學計數法轉數字,數字裡的逗號處理)

1.引言  float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是,商業計算往往要求結果精確,這時候BigDecimal

Python中的除法保留小數

在C/C++語言對於整形數執行除法會進行地板除(捨去小數部分)。例如 int a=15/10; a的結果為1。 同樣的在Java中也是如此,所以兩個int型的資料相除需要返回一個浮點型資料的時候就需要強制型別轉換,例如 float a = (float)b/c

BigDecimal四捨五入保留小數

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class NumberFormatDemo { public static void main(

Java 保留小數BigDecimal和DecimalFormat用法)

萌新今晚用java刷題時候,發現讓人保留兩位小數的題,查百度之後發現有四種方法。然而我覺得我百度到的方法我都看不懂(´-ι_-`)。於是在我多方查證以及自我實驗之後總結兩個好使的法子。 BigDeci

BigDecimal保留小數及格式化成百分比

在專案中經常會用到小數的一些計算,而float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,

BigDecimal的用法詳解(保留小數,四捨五入,數字格式化,科學計數法轉數字,數字裡的逗號處理)

一、簡介     Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變數double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。float和double只能用來做科學計算或

Java-小技巧-005-double類型保留小數4種方法

bsp 轉換 args clear cal instance double static ati 4種方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.Decimal

C# 保留小數

pre float bsp color system output nbsp col double 四舍五入保留 float a=0.188f; double b=System.Math.Round(a,2);//output: 0.19 直接截取: float f=

Java float保留小數或多小數

plain ima itl highlight border 十進制 syn 兩位小數 ice 方法1:用Math.round計算,這裏返回的數字格式的. 1 2 3 4 float price=89.89; int itemNum=3; fl

【.Net】c# 讓double保留小數

con orm tr1 ima 一個 dbd for tin git 1、Math.Round(0.333333,2);//按照四舍五入的國際標準2、 double dbdata=0.335333; string str1=String.Format("{0:F

sql 四舍五入保留小數

num ima decimal tro 四舍五入 cas ron 關於 str select cast(362315*1.0/10000 as numeric(18,2)) select convert(decimal(18, 2), 362315 *