double类型相加(減、乘、除)结果会有些误差

更新时间:2023-07-13 00:59:06 阅读: 评论:0

double类型相加(減、乘、除)结果会有些误差
今天在调试代码的时候发现了⼀个double类型数据相减的有趣问题,148163.1 - 82692.09⼤家猜猜结果等于多少,经过调试最终为5471.010*********。
是不是很奇怪,下⾯将说明这其中的奥妙!
double属于floating binary point types,也就是说都double型的数值在相加减的时候,会将数值转换成⼆进制的数值
如10001.10010110011这种表⽰发再做相加减,但是在转换成⼆进制代码表⽰的时候,存储⼩数部分的位数会有不够的现象,即⽆限循环⼩数,这就是造成微差距的主要原因。
1.只取需要⽤到的位数:
⼩数点台后⾯的位数部分就不要管了,不过这种⽅法不太好。
2.使⽤Decimal类型:
⽤Decimal就不会出现上⾯的问题了,可以准确的计算⼩数值,知识Decimal的范围⽐double⼩,⼀般情况下也够⽤了。
Decimal类型的有效位数达到28位,⽽double类型的16位,所以Decimal类型⽐Double类型能表⽰更精确的浮点数。
1.在double类型数值进⾏⽐较⼤⼩的情况最好使⽤1.02-1.01==double.MinValue这种⽅式进⾏判断
2.使⽤double类型进⾏加减的情况下看看能否使⽤Decimal类型进⾏计算
会计英文怎么说
package org.lxh.demo11.numberdemo;
import java.math.BigDecimal;
class MyMath {
public static double add(double d1, double d2)
{        // 进⾏加法运算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.add(b2).doubleValue();
}
public static double sub(double d1, double d2)
{        // 进⾏减法运算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.subtract(b2).doubleValue();
}
public static double mul(double d1, double d2)
{        // 进⾏乘法运算
BigDecimal b1 = new BigDecimal(d1);
做春梦
BigDecimal b2 = new BigDecimal(d2);
泰国人
return b1.multiply(b2).doubleValue();
}
英语笔记public static double div(double d1,
double d2,int len) {// 进⾏除法运算
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
return b1.divide(b2,len,BigDecimal.
ROUND_HALF_UP).doubleValue();
}
public static double round(double d,
int len) {    // 进⾏四舍五⼊
味四字成语
操作
BigDecimal b1 = new BigDecimal(d);
BigDecimal b2 = new BigDecimal(1);
// 任何⼀个数字除以1都是原数字
// ROUND_HALF_UP是BigDecimal的⼀个常量,表⽰进⾏四舍五⼊的操作
return b1.divide(b2, len,BigDecimal.
ROUND_HALF_UP).doubleValue();
}
}
public class BigDecimalDemo01 {
public static void main(String[] args) {
海蜇怎么凉拌好吃
System.out.println("加法运算:" +
3.333), 1));
System.out.println("乘法运算:" +麻辣小吃
什么必报und(MyMath.mul(10.345,
3.333), 3));
System.out.println("除法运算:" +
MyMath.div(10.345, 3.333, 3));
System.out.println("减法运算:" +
3.333), 3));
}
}

本文发布于:2023-07-13 00:59:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079157.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   运算   位数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图