java精确的加减乘除
2013-09-28 20:47
393 查看
package mathDemo; import java.math.BigDecimal; /** * 目标:封装加减乘除操作的自定义工具类 * 原因:float ,double 只能用来做科学计算或者工程计算,但在商业计算中要用java.math.BigDecimal * 创建人: 李林君 邮箱: * 创建日期: 2013-9-28 * <p> * * @version 1.0 * @since NC5.7 */ public class ArithUtil { // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 不能实例化 private ArithUtil() { } /** * 说明: * 提供精确的加法运算 * 创建人: 李林君 邮箱: * 创建日期: 2013-9-28 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1));// 建议写string类型的参数,下同 BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } /** * 说明: * 提供精确的减法运算 * 创建人: 李林君 邮箱: * 创建日期: 2013-9-28 * * @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(); } /** * 说明: * 提供精确的乘法运算 * 创建日期: 2013-9-28 * * @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(); } /** * 说明: * 提供相对精确的除法运算,当发生除不尽的情况,精确到.后10位 * 创建人: 李林君 邮箱 * 创建日期: 2013-9-28 * * @param v1 * @param v2 * @return */ public static double div(double v1, double v2) { return div(v1, v2, DEF_DIV_SCALE); } /** * 说明: * 创建人: 李林君 邮箱: * 创建日期: 2013-9-28 * * @param v1 * @param v2 * @param scale * @return */ private 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();// scale 后的四舍五入 } }
本代码摘自《你必须知道的261个java问题》
相关文章推荐
- 用java字节码解释i++和++i
- eclipse.ini配置eclipse的启动参数
- java笔试题---interface与abstract class的区别
- Java 运行的顺序
- java三种判断字母大小写的方法
- java笔试题---override与overload的区别
- Java运算符与java语句
- Java中equals和==的区别
- 马士兵java视频学习笔记第一章:Hello,World!
- eclipse中设定文档注释
- Activiti5安装指南-Myeclipse 9.0
- Struts2中文件上传的两种方式
- Struts2中文件上传的两种方式
- Java基础 之软引用、弱引用、虚引用
- java笔试题---如何跳出当前的多重嵌套循环
- struts2实现文件下载
- Tutorial: Getting Started with Spring Security
- 马士兵java视频学习笔记第一章:安装jdk
- java线程
- JAVA WEB入门级