Java數據類型中 int,double,float 的計算以及精度處理
一、float和double型的精度處理
float和double的精度是由尾數的位數決定的。
浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含着的“1”,由於它是不變的,故不能對精度造成影響。
(8.25用十進制的科學計數法表示為:8.2510E0,用二進制表示可表示為1000.01,用二進制科學計數法表示為:1.00012E3
120.5用十進制的科學計數法表示為:1.20510E2,用二進制表示為:1110110.1,用二進制科學計數法表示為:2.11011012E6
可見任何一個數都的科學計數法表示都為1.xxx*2En, 尾數部分就表示為xxxx)
float:2^23 = 8388608,共七位,意味着最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
二、用BigDemical來處理
首先導入:
import java.math.BigDecimal;語法構造:
BigDecimal a = new BigDecimal( Double.toString(參數1) );
BigDecimal b = new BigDecimal( Double.toString(參數2) );輸出語句:
1、直接輸出:
System.out.println(a.multiply(b)); 2、指定數據類型輸出:
int型:
int result = a.multiply(b).intValue();
System.out.println(result); float型:
float result = a.multiply(b).floatValue();
System.out.println(result); double型:
double result = a.multiply(b).doubleValue();
System.out.println(result);
