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);