java double类型变量,相加或相减后面小数为什么会不一样呢?

jdk是16

该问题主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示1/10。就像我们平时使用的十进制中无法精确的表示1/3是一样的道理,如果需要在数值计算中不含有任何误差,要使用BigDecimal类进行编程。
具体的代码如下
//两个Double数值相加
public static Double add (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.add(b2).doubleValue();
}
//两个Double数值相减
public static Double sub (Double value01,Double value02){
BigDecimal b1=new BigDecimal(value01.toString());
BigDecimal b2=new BigDecimal(value02.toString());
return b1.subtract(b2).doubleValue();

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2021-04-29
原因分析:计算机用二进制存放数据,有些小数(10进制转2进制,乘2取整至小数位为零,有些小数有可能小数位永远达不到零,然后定个精度就不继续乘2取整操作)是无法准确表示的。

解决方法:使用BigDecimal提高计算的精度。
第2个回答  2021-04-20
double是浮点类型的,转化为10进制后默认是保留两位小数的
如果不想要后面的0,你可以将数值转为int整型本回答被网友采纳
第3个回答  2021-04-20
用decimal解决这种问题

java double类型变量,相加或相减后面小数为什么会不一样呢?
该问题主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示1\/10。就像我们平时使用的十进制中无法精确的表示1\/3是一样的道理,如果需要在数值计算中不含有任何误差,要使用BigDecimal类进行编程。具体的代码如下 \/\/两个Double数值相加 public static Double add (Double value01,Double ...

java里面两个double类型的数字相加为什么输出和的后面会出现一些00
double是浮点类型的,转化为10进制后默认是保留两位小数的 如果不想要后面的0,你可以将数值转为int整型

java double相加 double z=3.564; double a=5.13; System.out.println...
这是一个典型的精度问题,是根虚拟机有关的,为了达到高精度,因此实际应用中,也不适合使用四舍五入函数来截取,一般都是通过使用decimal的浮点数据类型来解决这个问题,如下:String data = new DecimalFormat("#.##").format(1.99999999);其中 #.##表示精度,保证两位小数的精度,那么这个结果就是...

Java里两个二位小数相加,会得到小数点后很多位。
BigDecimal b1 = new BigDecimal(Double.toString(v1));BigDecimal b2 = new BigDecimal(Double.toString(v2));return b1.multiply(b2).doubleValue();} \/ 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。param v1...

Java之哪些情况下变量不会初始化
不同的变量初始化方法不同。变量包括:类的属性,或者叫值域 方法里的局部变量 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。int类型变量默认初始值为0 float类型变量默认初始值为0.0f doub...

java问题,请问在java中什么是直接量
当程序第一次使用某个字符串直接量时,Java会使用常量池来缓存该字符串直接量,如果程序后面的部分需要用到该字符串直接量时,Java会直接使用常量池中的字符串直接量。String类是一个典型的不可变类,因此String对象创建出来就不可能被改变,所以无须担心共享String对象会导致混乱。Java会确保每个字符串常量...

java float double精度为什么会丢失
这样的结果很让人讶异。20014999 这么小的数字在float下没办法表示。于是带着这个问 题,做了一次关于float和double学习,做个简单分享,希望有助于大家对java 浮 点数的理解。关于 java 的 float 和 double Java 语言支持两种基本的浮点类型: float 和 double 。java 的浮点类型都依据 IEEE 754 标准...

java变量类型转换(java变量的类型转换基本知识)
JAVA变量类型转换问题1、Double.parseDouble(String类型变量)例如定义String变量A为“10”,将String转化为Double变量。2、代码本身是没错的,但是在转型的时候,request.getParameter(age)这个值不能为空,否则转换的时候就会报错。3、intintValue=bigDecimal.intValue();System.out.println(intValue);这样...

Java中int转float可能会损失精度,但是int转double为什么也会损失...
float和double的精度就是个笑话,单单用来运算都会出错,当然也是存储的问题。你要纠结于精度,就用bigdecimal。这个是绝对没有任何精度问题,

在java 中怎么把double类型转成 int类型
通过Math类将double转换成整数,如果是要转换类型可以通过强制类型转换实现,如下图:知识拓展:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...

相似回答