java.math.BigDecimal 对浮点数据的精度处理

来源:互联网 发布:mac还原出厂设置 编辑:程序博客网 时间:2024/04/28 23:39
原文地址:JAVA中在指定精度下四舍五入作者:Curry'sSpri

BigDecimal类说明:该类可以计算小数大数的加减乘除操作,最重要的是他可以帮我们对浮点型数据进行精度控制,所以,四舍五入就要靠他了!而其中,除法操作是带有精度控制的,所以我们四舍五入的思路就是,把一个数除以1,并指定精度就行了!

以下是一个实例:

package org.curry.test;
import java.math.BigDecimal;

class MyMath {
 public static double add(String num1, String num2) {
  BigDecimal bd1 = new BigDecimal(num1);//构造一个大数
  BigDecimal bd2 = new BigDecimal(num2);
  return bd1.add(bd2).doubleValue();//调用add静态方法把bd2加到bd1上,并返回doubleValue()类型数据,也可以是intValue()
 }

 public static double sub(String num1, String num2) {
  BigDecimal bd1 = new BigDecimal(num1);
  BigDecimal bd2 = new BigDecimal(num2);
  return bd1.subtract(bd2).doubleValue();//减法操作
 }

 public static double mul(String num1, String num2) {
  BigDecimal bd1 = new BigDecimal(num1);
  BigDecimal bd2 = new BigDecimal(num2);
  return bd1.multiply(bd2).doubleValue();//乘法操作
 }

 public static double div(String num1, String num2, int scale) {
  BigDecimal bd1 = new BigDecimal(num1);
  BigDecimal bd2 = new BigDecimal(num2);
  return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();//除法操作
 }
 //要四舍五入,我们借助BigDecimal的除法操作,因为任何数除以1都不变,然后可用scale指定精度,用ROUND_HALF_UP指定为四舍五入
 public static double round(double num, int scale) {
  BigDecimal bd1 = new BigDecimal(num);
  BigDecimal bd2 = new BigDecimal(1);
  return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); }//参数:scale保留小数位个数,BigDecimal.ROUND_HALF_UP:向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。其他还有:HALF_DOWN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。HALF_EVEN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入
}

public class PrecisionTest {
 public static void main(String[] args) {
  String num1 = "12345.07891";
  String num2 = "3333.5101";
  System.out.println("加法操作:" + MyMath.round(MyMath.add(num1, num2), 2));
  System.out.println("减法操作:" + MyMath.round(MyMath.sub(num1, num2), 2));
  System.out.println("乘法操作:" + MyMath.round(MyMath.mul(num1, num2), 2));
  System.out.println("除法操作:" + (MyMath.div(num1, num2, 2)));
 }
}

原创粉丝点击