解决Java计算浮点数精度问题(BigDecimal)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解决Java计算浮点数精度问题(BigDecimal),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2781字,纯文字阅读大概需要4分钟。
内容图文
工具类如下:
package com.yusj.web.utils; import java.math.BigDecimal; /** * * @ClassName: ArithUtils * @Description: 数学计算工具类 * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。 * @author shaojian.yu * @date 2015年11月9日 下午5:44:12 * */ public class ArithUtils { // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private ArithUtils() { } /** * * @Title:add * @Description: 提供精确的加法运算。 * @author shaojian.yu * @date 2015年11月9日 下午5:46:55 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static 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(); } /** * * @Title:sub * @Description: 提供精确的减法运算。 * @author shaojian.yu * @date 2015年11月9日 下午5:47:24 * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ public static double sub(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.subtract(b2).doubleValue(); } /** * * @Title:mul * @Description: 提供精确的乘法运算。 * @author shaojian.yu * @date 2015年11月9日 下午5:47:51 * @param v1 被乘数 * @param v2 乘数 * @return 两个参数的积 */ public static double mul(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.multiply(b2).doubleValue(); } /** * * @Title:div * @Description: 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入。 * @author shaojian.yu * @date 2015年11月9日 下午5:48:10 * @param v1 被除数 * @param v2 除数 * @return 两个参数的商 */ public static double div(double v1, double v2) { return div(v1, v2, DEF_DIV_SCALE); } /** * * @Title:div * @Description: 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 * @author shaojian.yu * @date 2015年11月9日 下午5:48:50 * @param v1 被除数 * @param v2 除数 * @param scale 表示需要精确到小数点以后几位。 * @return 两个参数的商 */ public static double div(double v1, double v2, int scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * * @Title:round * @Description: 提供精确的小数位四舍五入处理。 * @author shaojian.yu * @date 2015年11月9日 下午5:49:13 * @param v 需要四舍五入的数字 * @param scale 小数点后保留几位 * @return 四舍五入后的结果 */ public static double round(double v, int scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } };
原文:http://ysj5125094.iteye.com/blog/2255766
内容总结
以上是互联网集市为您收集整理的解决Java计算浮点数精度问题(BigDecimal)全部内容,希望文章能够帮你解决解决Java计算浮点数精度问题(BigDecimal)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。