zoukankan      html  css  js  c++  java
  • Java中的数据类型BigDecimal

    Java中的简单浮点数据类型float和double不能够进行运算

    --------------加减乘除--------------
    0.060000000000000005
    0.5800000000000001
    401.49999999999994
    1.2329999999999999
    -------------BigDecimal------------
    0.06
    0.58
    401.5
    1.233

    /**
    * Decimal数据测试
    * Java中的简单浮点数据类型float和double不能够进行运算
    *
    @author archie2010
    * since 2011-3-31上午10:41:13
    */
    public class DecimalTest {

    //默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;

    public static void main(String[] args) {
    System.out.println(
    "--------------加减乘除--------------");
    System.out.println(
    0.05 + 0.01);
    System.out.println(
    1.0 - 0.42);
    System.out.println(
    4.015 * 100);
    System.out.println(
    123.3 / 100);
    System.out.println(
    "-------------BigDecimal------------");
    System.out.println(add(
    0.05, 0.01));
    System.out.println(sub(
    1.0, 0.42));
    System.out.println(mul(
    4.015, 100));
    System.out.println(div(
    123.3, 100, DEF_DIV_SCALE));
    }
    /**
    * 加法运算
    *
    @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();
    }
    /**
    * 减法运算
    *
    @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();
    }
    /**
    * 乘法运算
    *
    @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();
    }
    /**
    * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
    * 定精度,以后的数字四舍五入。
    *
    @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();
    }
    /**
    * 提供精确的小数位四舍五入处理。
    *
    @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();
    }
    }

    by archie
  • 相关阅读:
    pongo英雄会-幸运数题解
    求最大公约数的算法
    第二课、GUI程序实例分析------------------狄泰软件学院
    第一课、GUI程序原理分析------------------狄泰软件学院
    第六十八课、拾遗:令人迷惑的写法
    第六十七课、经典问题解析五
    第六十六课、c++中的类型识别
    第六十五课、c++中的异常处理(下)
    第六十四课、c++中的异常处理(上)
    第六十三课、C语言的异常处理
  • 原文地址:https://www.cnblogs.com/archie2010/p/2002415.html
Copyright © 2011-2022 走看看