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
  • 相关阅读:
    (原创)神舟笔记本bios设置——神船战神ZX7-CP7S2 <一>
    Kali笔记<三> 安装中文输入法
    (原创)Kali笔记<二>root权限的使用和启用
    (原创)Kali笔记<一>虚拟机安装Kali
    加快vmware虚拟机运行速度的方法(大牛勿笑)
    PR/AE/PS 素材模板网站
    批量查杀该死的VBscript “svchost.exe” 脚本挂马
    echarts统计图Y轴(或X轴)文字过长问题解决
    正则实例
    Angular.js的自定义功能
  • 原文地址:https://www.cnblogs.com/archie2010/p/2002415.html
Copyright © 2011-2022 走看看