EffecitveJava_对要求精确计算的场合不要使用double,float

本文通过对比double和BigDecimal在循环计算中的表现,展示了在需要精确计算的场合下使用BigDecimal的重要性。通过对购买糖果的例子进行编码实现,文章说明了由于浮点数表示上的限制,double类型可能导致计算错误,而BigDecimal则能提供准确的计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p>EffecitveJava_对要求精确计算的场合不要使用double,float</p>

<p><textarea cols="50" rows="15" name="code" class="java:showcolumns">public static void doubleError() {
double founds = 1.00;// 口袋里一共有一块钱
int itemBought = 0;// 记录可以买几个糖果
for (double price = 0.1; founds >= price; price += 0.1) {// 糖果的价格依次曾加0.1
founds -= price;// 每次买一个,口袋里的钱就要花掉一些
itemBought++;// 每次买一个,手中糖果的数量增加一次
}
System.out.println(itemBought);
System.out.println(founds);
}

public static void bigDecimalSuccess() {
BigDecimal founds = new BigDecimal("1.00");// 口袋里一共有一块钱
BigDecimal TEN_CENTS = new BigDecimal("0.1");
int itemBought = 0;// 记录可以买几个糖果
for (BigDecimal price = TEN_CENTS; founds.compareTo(TEN_CENTS) >= 0; price = price
.add(TEN_CENTS)) {// 糖果的价格依次曾加0.1
founds = founds.subtract(price);// 每次买一个,口袋里的钱就要花掉一些
itemBought++;// 每次买一个,手中糖果的数量增加一次
}
System.out.println(itemBought);
System.out.println(founds.doubleValue());
}</textarea></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值