当前位置: 移动互联网学院 > Java培训 > JAVA开发 > Java浮点计算入门教程
Java浮点计算入门教程 时间:2017-10-10     来源:华清远见Java培训中心

我们在学习Java基本数据类型的时候接触过浮点数,浮点数说白了就是小数,是为了更精确的表示某些数据。对于浮点数,很多朋友还是存在疑惑的,尤其是浮点数计算方面,今天华清Java学院小编就给大家分享一份Java浮点计算入门教程,希望对大家理解Java浮点计算有所帮助。

Java浮点计算入门教程

Java浮点计算的简单例子:

class Test{

public static void main(String[] args){

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

为什么会是这样的数值?再看一个代码

class Test1{

public static void main(String[] args){

System.out.printf("%1.20f\n",0.05f);

System.out.printf("%1.20f\n",0.01f);

System.out.printf("%1.20f\n",1.0f);

System.out.printf("%1.20f\n",0.42f);

System.out.printf("%1.20f\n",123.3f);

}}

看上面的代码运行的结果:

0.05000000074505806000

0.00999999977648258200

1.00000000000000000000

0.41999998688697815000

123.30000305175781000000

这是float在计算机上面的表示的。

java中的float和double,采用IEEE754标准,实际上是用利用科学计数法来表达实数。即用一个尾数(Mantissa也叫有效数字 ),一个基数(Base),一个指数(Exponent)以及

一个表示正负的符号来表达实数。实数表示分为三个域。

float用32bit存储,double用64bit存储。

第一个域为符号域,0 表示数值为正数,而 1 则表示负数;

第二个域为指数域,对应于我们之前介绍的二进制科学计数法中的指数部分。其中单精度数为 8 位,双精度数为 11 位。float单精度的指数范围为-127 和 127 之间。

第三个域为尾数域,其中单精度数为 23 位长,双精度数为 52 位长。

造成无法准确的计算出来我们想要的结果,原因是科学计算法无法准确的存储,只有相近的取近似值

所以我们对于精确的计算采用的是BigDecimal类可以解决上面的问题。

X