Java double类型相加问题
来源:互联网 发布:全国教育经费统计软件 编辑:程序博客网 时间:2024/05/16 04:06
double1+double2 其数据可能没有误差但是,多个double直接相加的时候,存在精度误差,
这个时候就要采用bigDecimal函数进行运算
首先建立String类型的数据,BigDecimal(Double.toString(double))
如果写BigDecimal(double)或者BigDecimal(Double.valueOf(double)))
那样依旧有精度误差,
只有在String类型下的double运算,才会避免精度误差。
new BigDecimal(Double.toString(double)).add(new BigDecimal(Double.toString(double));
/** * @param b1 * BigDecimal * @param v2 * double * @return BigDecimal * */ public BigDecimal add(BigDecimal b1, double v2) { // BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2); }
/** * @param b1 * double * @param v2 * double * @return BigDecimal * */ public BigDecimal add(double v1, double v2) { BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2); }
/** * @param b1 * double * @param v2 * double * @return double * */ public double add(double v1, double v2) { BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); }
二、double 三种加法比较
+,strictfp,BigDecimel
public class MathDemo { /** * @param args */ public static void main(String[] args) { System.err.println("普通 "+ addNormal(12353.21,21334.24,154435.03)); System.err.println("strictfp "+addDouble(12353.21,21334.24,154435.03)); System.err.println("BigDEcimel: "+add(12353.21,21334.24,154435.03)); } public static double addNormal(double... v1) { double res = 0; for (int i = 0; i < v1.length; i++) { res += v1[i]; } return res; } public static strictfp double addDouble(double... v) { double res = 0; for (int i = 0; i < v.length; i++) { res += v[i]; } return res; } /** * @param b1 * double * @param v2 * double * @return double */ public static double add(double... v) { BigDecimal b = new BigDecimal(Double.toString(v[0])); for (int i = 1; i < v.length; i++) { BigDecimal b2 = new BigDecimal(Double.toString(v[i])); b=b.add(b2); } return b.doubleValue(); }}
输入 12353.21,21334.24,154435.03三个类型的数据时候结果: 普通 188122.47999999998 strictfp 188122.47999999998 BigDEcimel: 188122.48输入 3.21, 4.24,5.03结果 普通 12.48 strictfp 12.48 BigDEcimel: 12.48输入: 12353.21,21334.24结果: 普通 33687.45 strictfp 33687.45 BigDEcimel: 33687.45
4 0
- Java double类型相加问题
- JAVA double 类型相加
- java Double类型的数字相加
- J2SE-double 类型相加
- 关于java中double相加的问题
- java中两个double类型相加抛出异常报错问题的解决方法
- 关于double类型数字相加位数发生变化的问题
- Android下两个double类型相加的问题
- 解决java中两个double类型的值相加
- java中double类型相加出现的怪事
- java double 相加
- java double相加
- double类型相加精度问题解决
- java double类型运算问题
- Java中char类型相加问题
- java double相加精度误差
- java中,数值计算时的类型转换 ( 两个int类型相加,赋值给double )
- Double类型的数相加会出错
- Java对象的序列化与反序列化
- HDU 5907 Find Q
- RabbitMQ
- CoreFreq CPU监控软件
- 线程,协程
- Java double类型相加问题
- JavaScript中Event.returnValue属性
- 欢迎使用CSDN-markdown编辑器
- adaboost算法
- java 使用poi将PPT转为图片,在线预览PPT
- leetcode Bllomberg面试题11. Container With Most Water
- js和jQuery常用方法区分
- studio 导出jar包和混淆jar包
- 对Struts框架的理解