找零时刻

问题:

用两美元买了1.10美元的东西,问需要找多少零钱

import java.util.*;
public class Second{
        public static void main(String[] args){
                System.out.println(2.00-1.10);
        }
}

输出是什么?

答案:0.8999999999999999

为什么不是0.90?因为1.10在内存中不能精确存储,因此存了最接近它的一个数,

import java.util.*;
public class Second{
        public static void main(String[] args){
                System.out.printf("%.2f
",2.00-1.10);
        }
}

输出:0.90

虽然得到了预期,但是显然并没有解决内存中存储的问题,我们只是在输出层面上解决了问题

先介绍下BigDecimal

对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。

序号

   

类型

   

1

public BigDecimal(double val)

构造

将double表示形式转换

为BigDecimal

2

public BigDecimal(int val)

构造

将int表示形式转换为

BigDecimal

3

public BigDecimal(String val)

构造

将字符串表示

形式转换为BigDecimal

4

public BigDecimal add(BigDecimal augend)

普通

加法

5

public BigDecimal subtract(BigDecimal
subtrahend)

普通

减法

6

public BigDecimal multiply(BigDecimal
multiplicand)

普通

乘法

7

public BigDecimal divide(BigDecimal
divisor)

普通

除法

import java.util.*;
import java.math.*;
public class Second{
        public static void main(String[] args){
                //System.out.println(2.00-1.10);
                //System.out.printf("%.2f
",2.00-1.10);
                System.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));
        }
}

需要说明的是需要用字符串构造BigDecimal,否则输出依然是错误的。

原文地址:https://www.cnblogs.com/qionghua520/p/4370618.html