bigdicmal

 

四捨五入 
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)
digits 顯示的數字位數
爲格式化對象設定小數點後的顯示的最多位,顯示的最後位是舍入的

import java.text.* ;
import java.math.* ;
class TT
{
public static void main(String args[])
{ double x=23.5455;
NumberFormat ddf1=NumberFormat.getNumberInstance() ;


ddf1.setMaximumFractionDigits(2);
String s= ddf1.format(x) ;
System.out.print(s);
}
}

 

---------------------------------------------------------------------------------------------------------

 

有一篇:

 

(1)、浮點數精確計算

勝利油田三流合一項目中一直存在一個問題,就是每次報表統計的物資金額和實際的金額要差那麼幾分錢,和實際金額不一致,讓客戶覺得總是不那麼舒服,原因是因爲我們使用java的浮點類型double來定義物資金額,並且在報表統計中我們經常要進行一些運算,但Java中浮點數(double、float)的計算是非精確計算,請看下面一個例子:

    System.out.println(0.05 + 0.01);

    System.out.println(1.0 - 0.42);

    System.out.println(4.015 * 100);

    System.out.println(123.3 / 100);

你的期望輸出是什麼?可實際的輸出確實這樣的:

    0.060000000000000005

0.5800000000000001

401.49999999999994

1.2329999999999999

這個問題就非常嚴重了,如果你有123.3元要購買商品,而計算機卻認爲你只有123.29999999999999元,錢不夠,計算機拒絕交易。

(2)、四捨五入

是否可以四捨五入呢?當然可以,習慣上我們本能就會這樣考慮,但四捨五入意味着誤差,商業運算中可能意味着錯誤,同時Java中也沒有提供保留指定位數的四捨五入方法,只提供了一個Math.round(double d)和Math.round(float f)的方法,分別返回長整型和整型值。round方法不能設置保留幾位小數,我們只能象這樣(保留兩位):

public double round(double value){

return Math.round( value * 100 ) / 100.0;

}

但非常不幸的是,上面的代碼並不能正常工作,給這個方法傳入4.015它將返回4.01而不是4.02,如我們在上面看到的

4.015 * 100 = 401.49999999999994

因此如果我們要做到精確的四捨五入,這種方法不能滿足我們的要求。

還有一種方式是使用java.text.DecimalFormat,但也存在問題,format採用的舍入模式是ROUND_HALF_DOWN(舍入模式在下面有介紹),比如說4.025保留兩位小數會是4.02,因爲.025距離” nearest neighbor”(.02和.03)長度是相等,向下舍入就是.02,如果是4.0251那麼保留兩位小數就是4.03。

System.out.println(new java.text.DecimalFormat("0.00").format(4.025));

System.out.println(new java.text.DecimalFormat("0.00").format(4.0251));

輸出是

4.02

4.03

 

(3)、浮點數輸出(科學記數法)

Java浮點型數值在大於9999999.0就自動轉化爲科學記數法來表示,我們看下面的例子:

    System.out.println(999999999.04);

    System.out.println(99999999.04);

    System.out.println(10000000.01);

    System.out.println(9999999.04);

輸出的結果如下:

    9.9999999904E8

9.999999904E7

1.000000001E7

9999999.04

    但有時我們可能不需要科學記數法的表示方法,需要轉換爲字符串,還不能直接用toString()等方法轉換,很煩瑣。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/yuhua3272004/archive/2008/10/14/3075436.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章