心法领悟025:小心程序中的货币运算。
对于商业程序的开发,一定要注意其中的货币运算,因为计算机无法通过二进制精确地表示所有小数,所以计算机中的小数运算会有一定的误差。虽然误差很小,但是货币运算可能会操作多个有误差的运算结果,长期的数据累计会造成更大的误差,特别是银行使用的系统不允许任何微小的误差,所以我们应该熟练掌握BigDecimal类的用法。
技巧:创建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);// 输出精确结果
}
}
非精确计算
剩余金额:0.8999999999999999
精确计算
剩余金额:0.9
本文深入探讨了在商业程序开发中,如何避免由计算机小数运算带来的误差,通过使用BigDecimal类实现精确的货币运算,确保金融交易的准确性。文中详细解释了直接使用浮点数构造BigDecimal可能导致的精度损失,并提供了使用数字字符串构造BigDecimal的方法来避免此类问题。
7899

被折叠的 条评论
为什么被折叠?



