我是靠谱客的博主 繁荣书本,最近开发中收集的这篇文章主要介绍关于java浮点数的一些问题,BigDecimal的累加,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

事情的起因

有这么两组数:
a :83.86 71.81 69.3 65.49 79.03 380.57
b:2.52 2.15 2.08 1.96 2.37 380.57
在计算数组a[i]+b[i]累加的过程中遇到这个问题

float[] money = {(float) 83.86, (float) 71.81, (float) 69.3, (float) 65.49, (float) 79.03};
float[] tax = {(float) 2.52, (float) 2.15, (float) 2.08, (float) 1.96, (float) 2.37};
float c = 0;
for (int i = 0; i < money.length; i++) {
c+=money[i]+tax[i];
}
System.out.println(c);

打印结果 380.56998,非常离谱,纯加操作怎么不可能把最多小数点后两位的数加成小数点后五位。一开始想的主要原因是因为第一组数里面夹杂这一个只有一位小数的。果不其然,每一次循环打印一次结果
86.38
160.34
231.72
299.16998
380.56998
第三次循环加出的问题,然后网上找了一大堆资料,最初的想得是强制保留两位于是????

float[] money = {(float) 83.86, (float) 71.81, (float) 69.3, (float) 65.49, (float) 79.03};
float[] tax = {(float) 2.52, (float) 2.15, (float) 2.08, (float) 1.96, (float) 2.37};
float c = 0;
DecimalFormat decimalFormat = new DecimalFormat("#.00");
for (int i = 0; i < money.length; i++) {
c+=Float.parseFloat(decimalFormat.format(money[i]))+Float.parseFloat(decimalFormat.format(tax[i]));
System.out.println(c);
}
System.out.println(c);

使用Decimalformat把float类型转为String格式化,然后转回去,转化的很成功但是结果失败了。。。
于是又查,找到了BigDecimal,然后查了一下他的方法确实挺好用的,构造方法参数可以为double,String,int,bigdecimal.add()就可以实现加法,同样的减法substract()函数, 乘法multiply()函数,除法divide()函数,竟然还自带绝对值abs()函数。加法是很不错但是弄累加的时候就是不行。

float[] money = {(float) 83.86, (float) 71.81, (float) 69.3, (float) 65.49, (float) 79.03};
float[] tax = {(float) 2.52, (float) 2.15, (float) 2.08, (float) 1.96, (float) 2.37};
DecimalFormat decimalFormat = new DecimalFormat("#.00");
BigDecimal c = new BigDecimal(0);
for (int i = 0; i < money.length; i++) {
System.out.print(tax[i]+"
");
BigDecimal money1 = new BigDecimal(String.valueOf(money[i]));
BigDecimal tax1 = new BigDecimal(decimalFormat.format(tax[i]));
c.add(tax1.add(money1));
}
System.out.println(c);

最后输出结果为0,中间尝试了很多办法,包括一系列的转化,使用FloatValue()方法转回浮点型,结果回到了起点。
最后最后最后,发现一个大问题,实际上BigDecimal的运算方法都是有返回值的,也就是说明我一直徘徊在一个很间的方法传参问题上,方法参数的指是无法被改变的,一定要接收这个返回值
于是????

float[] money = {(float) 83.86, (float) 71.81, (float) 69.3, (float) 65.49, (float) 79.03};
float[] tax = {(float) 2.52, (float) 2.15, (float) 2.08, (float) 1.96, (float) 2.37};
DecimalFormat decimalFormat = new DecimalFormat("#.00");
BigDecimal c = new BigDecimal(0);
for (int i = 0; i < money.length; i++) {
BigDecimal money1 = new BigDecimal(String.valueOf(money[i]));
BigDecimal tax1 = new BigDecimal(decimalFormat.format(tax[i]));
//关键点
c=c.add(tax1.add(money1));
}
System.out.println(c);

输出 380.57
解决

最后

以上就是繁荣书本为你收集整理的关于java浮点数的一些问题,BigDecimal的累加的全部内容,希望文章能够帮你解决关于java浮点数的一些问题,BigDecimal的累加所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部