float,double类型小数计算结果为啥不一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了float,double类型小数计算结果为啥不一样相关的知识,希望对你有一定的参考价值。

一道关于计算第N年后一共四年学费的问题,增长率是5%,为什么直接用1.05和用float i=1.05结果不一样,换成double i=1.05最后结果一样,但中间数据也不一样?

这个是由float和double的精度决定的。
float的精度能保证6位有效数字,因此小数点后第2位就是个约值,不能保证精确。
double的精度能保证15位有效数字,因此对于本题,保证精度到小数点后第2位,是一点问题都没有的。
参考技术A 运算中两者精度是不同的,由此导致结果不同。 参考技术B 直接写1.05的话他会默认认为是double类型,1.05f才是float类型追问

默认为double的话为什么第二种情况用double时计算出来中间的结果还是不一样?

本回答被提问者和网友采纳

double和float进行小数计算精度不够

1、float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal

2、注意:double 和float转换为字符串类型造成进度丢失;直接用字符串表示double 和float

3、案例:

package com.zhangwl.pg1113;

import org.junit.Test;

import java.math.BigDecimal;

/**
* @ClassName RunMain
* @Description 演示小案例
* @Author zhangwl
* @Date 2019/11/13 23:02
* @Version 1.0
**/
public class RunMain {

@Test
public void test_01() {
BigDecimal douDecMax = new BigDecimal(2.0);
BigDecimal douDecMin = new BigDecimal(1.10);
System.out.println("douDecMax - douDecMin = " + douDecMax.subtract(douDecMin));

System.out.println("********************分界线*************************");

BigDecimal strDecMax = new BigDecimal("2.0");
BigDecimal strDecMin = new BigDecimal("1.10");
System.out.println("strDecMax - strDecMin = " + strDecMax.subtract(strDecMin));
System.out.println();
}
}


运行结果:

douDecMax - douDecMin = 0.899999999999999911182158029987476766109466552734375
********************分界线*************************
strDecMax - strDecMin = 0.90

以上是关于float,double类型小数计算结果为啥不一样的主要内容,如果未能解决你的问题,请参考以下文章

为啥C++里面浮点与整数相乘的结果跟在计算器里的不一样呢?浮点我选的float

java用double和float进行小数计算精度不准确

decimal,float和double的区别是啥?

Java中double类型的变量,计算结果的小数点后为啥会有这么多0?

double计算结果不精确

JAVA 中除法后小数精度问题