zoukankan      html  css  js  c++  java
  • java 金额计算,商业计算 double不精确问题 BigDecimal,Double保留两位小数方法

    解决办法================== http://blog.javaxxz.com/?p=763
    
    一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法 进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺 憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,我挑最常用的两个 来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String str)。
    下面是两个浮点数相减的例子来说明:
    public static void main(String[] args) {
    double a = 1;
    double b = 0.9;
    BigDecimal a1 = new BigDecimal(Double.toString(a));
    BigDecimal b1 = new BigDecimal(Double.toString(b));
    BigDecimal a2 = new BigDecimal(a);
    BigDecimal b2 = new BigDecimal(b);
    double c = a1.subtract(b1).doubleValue();
    double d = a2.subtract(b2).doubleValue();
    System.out.println(“c=”+c);
    System.out.println(“d=”+d);
    }
    结果为:
    c=0.1
    d=0.09999999999999998
    可以得出结论:
    利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。
    

      Double保留两位小数方法

    	//保留2位小数
    	public static double get2Double(double a){
    	    DecimalFormat df=new DecimalFormat("0.00");
    	    return new Double(df.format(a).toString());
    	}
    

      

  • 相关阅读:
    scp 利用 ssh 协议 复制文件
    linux (fedora 28) 制作启动U盘,启动盘
    nc 命令使用详解
    env :让系统决定你命令的位置
    tali -f 和 tail -F 之间的区别
    斯诺克台球比赛规则 (Snooker)
    中式台球 规则 ( ChinaBilliards )
    美式九球比赛规则 (Nine-ball)
    Tmux 使用教程 on Fedora 28
    python 3.6 的 venv 模块
  • 原文地址:https://www.cnblogs.com/jifeng/p/4474756.html
Copyright © 2011-2022 走看看