工具类如下:
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(); } };
相关推荐
目前支持二进制浮点数的硬件和软件文档中,几乎都声称其浮点数实现符合IEEE 754标准。那么,什么是IEEE 754标准? 最权威的解释是IEEE754标准本身ANSI/IEEE Std 754-1985《IEEE Standard for Binary Floating-Point...
给大家介绍了Java中浮点数精度问题的解决方法,本文给大家介绍的非常详细,有问题描述有原因分析,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
NULL 博文链接:https://xide829.iteye.com/blog/663554
Java对浮点数的计算是不精确的,比如0.05+0.01结果不是0.06,而是0.060000000000000005,更有甚者,一个数除以0.0,Java是不会抛异常,而是得出无穷大的结果.本工具类解决了上述问题.该类提供了加减乘除四则运算的精确计算...
C语言中浮点数精度问题分析.pdf
c语言浮点数高精度加法计算
关于浮点数的精度问题,对于了解和学习C语言有一定帮助
单精度浮点数,双精度浮点数,浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。
算法-计算浮点数相除的余(信息学奥赛一本通-T1029)(包含源程序).rar
Java输入浮点数分别输出整数部分和小数部分
浮点数精度
java 浮点数举例java 浮点数举例java 浮点数举例
浮点数转换器,可将浮点数、单精度 双精度的数值转换为16进制发送
本代码将双精度浮点数转换为单精度浮点数,适合浮点数为正值的转换。 使用后将占用VD2810~VD2970字节,欢迎交流。 本代码的完成经历了一段时间的刻苦研究,无偿提供给真正需要的人,希望同行少走弯路。 代码允许复制...
js精度,js浮点数,js浮点数计算,js计算精度问题解决方案,js保留小数位,
PHP 中的整型大小和平台有关,通常最大值是二十亿,64位平台下最大值通常为 9E18,当程序中需要处理的数值超出整形的范围,数值将会被解释为浮点数。
主要介绍了PHP浮点数精度问题汇总,本文着重探讨PHP浮点数精度损失问题,用三个段落不同的方式讲解了这个问题的形成原因以及解决方法,需要的朋友可以参考下
浮点数和十六进制数的相互转换,包括:1.单精度浮点数(32位)和十六进制数的相互转换,2.双精度浮点数(64位)和十六进制数的相互转换。
MFC 浮点数计算器 经多次修正 计算精度高 界面清爽 简单易用
S7-200SMART_双精度浮点数转换为单精度浮点数库文件及使用说明