Java更精确的使用浮点数

解决Java算术运算不精确的问题(BigDecimal类)

BigDecimal 对象名 = new BigDecimal(String args)

加法
该方法实现两个BigDecimal类实例对象的加法运算,并将运算结果作为方法的返回值。该方法的声明如下:
public BigDecimal add(BigDecimal augend)
参数说明:
augend:与当前对象执行加法的操作数。

减法
该方法实现两个BigDecimal类实例对象的减法运算,并将运算结果作为方法的返回值。该方法的声明如下:
public BigDecimal subtract(BigDecimal subtrahend)
参数说明:
subtrahend:被当前对象执行减法的操作数。

乘法
该方法实现两个BigDecimal类实例对象的乘法运算,并将运算结果作为方法的返回值。该方法的声明如下:
public BigDecimal multiply(BigDecimal multiplicand)
参数说明:
multiplicand:乘法运算中的乘数。

除法
该方法实现两个BigDecimal类实例对象的除法运算,并将运算结果作为方法的返回值。该方法的声明如下:
public BigDecimal divide(BigDecimal divisor)
参数说明:
divisor:除法运算中的除数。

实例:浮点运算的典型实例是货币运算,在商品金额计算中,经常会涉及到小数运算,例如某个商品的价格是1.10元,而顾客现有金额是2元整。在计算机中所有数字都是使用二进制进行存储的,而二进制无法精确的表示所有的小数,所以使用基本数据类型进行小数运算会有一些误差,本实例将通过BigDecimal类实现精确的小数运算。

import java.math.BigDecimal;
public class AccuratelyFloat {
public static void main(String[] args) {
double money = 2;// 现有金额
double price = 1.1;// 商品价格
double result=money - price;
System.out.println(“非精确计算”);
System.out.println(“剩余金额:”+result);// 输出运算结果
// 精确浮点数的解决方法
BigDecimal money1 = new BigDecimal(“2”);// 现有金额
BigDecimal price1 = new BigDecimal(“1.1”);// 商品单击
BigDecimal result1=money1.subtract(price1);
System.out.println(“精确计算”);
System.out.println(“剩余金额:”+result1);// 输出精确结果
}

技巧:这里创建BigDecimal类的实例时,在构造方法中一定要使用数字字符串作为参数,如果直接使用浮点数或该类型的变量作为参数,那么构造方法接收的是经过二进制存储的浮点数,那样已经是不精确的浮点数了。

*小心程序中的货币运算
对于商业程序的开发,一定要注意其中的货币运算,因为计算机无法通过二进制精确的表示所有小数,所以计算机中的小数运算会有一定的误差,虽然误差非常小,但是货币运算可能会操作多个有误差的运算结果,长期的数据累计会造成更大的误差,特别是银行使用的系统不允许任何微小的误差,所以读者应熟练掌握BigDecimal类的用法。

发布了10 篇原创文章 · 获赞 2 · 访问量 143

猜你喜欢

转载自blog.csdn.net/qq_42188457/article/details/98949865