栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java无丢失精度计算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java无丢失精度计算

首先如果要进行计算相关的操作的话大多数人都会第一时间想到使用double或float作为计算的变量类型,然而这是禁忌因为使用这两种进行加减乘除会丢失数据的精度,如果你是从事金融相关的行业的话那么请你一定要记住不管是任何数据的计算都要使用BigDecimal作为变量类型因为这样不会丢失数据精度,那我们现在开始操作吧。

//初始化数据
double a=0.01;
double b=0.03;
double c;
c=a+b;
System.out.println("double直接计算:"+c);
BigDecimal biga = new BigDecimal(Double.toString(a));
BigDecimal bigb = new BigDecimal(Double.toString(b));
//无丢失精度计算相加biga+bigb,获取数据为double类型
System.out.println("无丢失精度相加计算:"+biga.add(bigb).doublevalue());
//无丢失精度计算相减biga+bigb,获取数据为double类型
System.out.println("无丢失精度相减计算:"+biga.subtract(bigb).doublevalue());
//无丢失精度计算相除biga除bigb,获取数据为double类型
System.out.println("不使用无丢失精度数据直接相除计算:"+a/b);
//第一个是相除的变量,第二个是小数点后面可以有几位的限制,第三个是到尾是向上取整或四舍五入等,获取数据为string类型
System.out.println("无丢失精度相除计算:"+biga.divide(bigb,100,bigb.ROUND_HALF_DOWN).toString());
//无丢失精度计算相乘biga乘bigb
System.out.println("无丢失精度相乘计算:"+biga.multiply(bigb).toString());
double res=biga.add(bigb).doublevalue();
//计算结果为double类型
System.out.println("相加计算类型为double类型:"+res);

值得注意的是相乘和相除,首先是相乘两个特殊的数据相乘会造成数据后面会出现字母E我查越过字母E是代表10的正或负次方把它的输出类型改为toString就可以看见所有的数据

另外一个是相除,如果和前面加减的操作一样也是没问题的但是这不严谨,因为相除数据是有无限循环或无限不循环小数的和加减操作一样的话后台是会报错的,我们需要在后面加上限制小数后面几位数,第三个位置是写到最后是向上整除或向下整除还是四舍五入。

 

无丢失精度计算就到这里希望对你们有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号