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位。
首先导入:
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);
?
Java数据类型中 int,double,float 的计算以及精度处理
原文:https://www.cnblogs.com/BlissbyXHW/p/13752545.html