zoukankan      html  css  js  c++  java
  • java.math.BigDecimal()的用法

    Java中简单的浮点数类型float和double是不能进行运算的,不光Java,很多语言都是这样。

    我们运行下面程序你将会看到

    public class TestMathDecimal {
        public static void main(String [] args){
            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);
        }
    }

    没错,结果确实是:

    0.060000000000000005
    0.5800000000000001
    401.49999999999994
    1.2329999999999999

    我们的第一反应是做四舍五入。Math中的roound是不能够设置保留几位小数的。

    Math.round(4.015 * 100)的结果为401,而不是我们期望的402。

    因此如果我们要进行精确的四舍五入,不能利用简单类型做任何运算。

    java.text.DecimalFormat也不能解决这个问题:

    System.out.println(new java.text.DecimalFormat("0.00").format(4.015));输出的是4.02。

    BigDecimal

      在商业计算中我们要用java.math.BigDecimal.BigDecimal有四个构造方法,我们不关心BigInteger来构造的那两个,还有两个分别是:

    BigDecimal(double val)

    BigDecimal(String val)

    除法运算:

      System.out.println(new BigDecimal(153.5).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));

      new BigDecimal(100)除数,2精确的位数,BigDecimal.ROUND_HALF_UP:舍入模式

    加法运算:

      System.out.println(new BigDecimal("2.005").add(new BigDecimal("0.03")));

    减法运算:

      System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));

    乘法运算:

      System.out.println(new BigDecimal("2.05").multiply(new BigDecimal("10")));

    ps:此处可能说的不是很清楚,以后会继续更新的。

    心里只有自己时,总嫌别人做得不够;心里只有别人时,总嫌自己做得不够。
  • 相关阅读:
    Installutil.exe的位置和路径
    .net服务安装(转载)
    移动程序云测试中心
    如何通过web地址直接调用webservices
    VC++引用类型与指针类型
    Android模拟 HTTP multipart/formdata 请求协议信息实现图片上传
    firefox看网页的插件
    DOS下输入汉字
    电脑APK
    HDOJ 1071(球泡无线和直线区域内的面积)
  • 原文地址:https://www.cnblogs.com/lovefeng/p/4678202.html
Copyright © 2011-2022 走看看