需要知道精确结果, 不能用float或者double. 用int, 或者BigDecimal, 下面是一个小例子: 计算1元钱钱可以买多少糖果. 其中糖果一毛钱一个.
//错误的, 使用double型
public class InappropriateFloat {
public static void main(String[] args) {
double funds = 1.00;
int itemsBought = 0;
for (double price = .10; funds >= price; price += .10) {
funds -= price;
itemsBought++;
}
System.out.println(itemsBought + " items bought.");
System.out.println("Change: ¥" + funds);
}
}
//使用整型, 用分计算
public class IntVersion {
public static void main(String[] args) {
int itemsBought = 0;
int funds = 100;
for (int price = 10; funds >= price; price += 10) {
itemsBought++;
funds -= price;
}
System.out.println(itemsBought + " items bought.");
System.out.println("Money left over: "+ funds + " cents");
}
}//用BigDecimal计算
import java.math.BigDecimal;public class BigDecimalVersion {
public static void main(String[] args) {
final BigDecimal TEN_CENTS = new BigDecimal( ".10"); int itemsBought = 0;
BigDecimal funds = new BigDecimal("1.00");
for (BigDecimal price = TEN_CENTS;
funds.compareTo(price) >= 0;
price = price.add(TEN_CENTS)) {
itemsBought++;
funds = funds.subtract(price);
}
System.out.println(itemsBought + " items bought.");
System.out.println("Money left over: ¥" + funds);
}
}这是Java高效编程上的例子。
我测试过没有问题,你试下~~
//错误的, 使用double型
public class InappropriateFloat {
public static void main(String[] args) {
double funds = 1.00;
int itemsBought = 0;
for (double price = .10; funds >= price; price += .10) {
funds -= price;
itemsBought++;
}
System.out.println(itemsBought + " items bought.");
System.out.println("Change: ¥" + funds);
}
}
//使用整型, 用分计算
public class IntVersion {
public static void main(String[] args) {
int itemsBought = 0;
int funds = 100;
for (int price = 10; funds >= price; price += 10) {
itemsBought++;
funds -= price;
}
System.out.println(itemsBought + " items bought.");
System.out.println("Money left over: "+ funds + " cents");
}
}//用BigDecimal计算
import java.math.BigDecimal;public class BigDecimalVersion {
public static void main(String[] args) {
final BigDecimal TEN_CENTS = new BigDecimal( ".10"); int itemsBought = 0;
BigDecimal funds = new BigDecimal("1.00");
for (BigDecimal price = TEN_CENTS;
funds.compareTo(price) >= 0;
price = price.add(TEN_CENTS)) {
itemsBought++;
funds = funds.subtract(price);
}
System.out.println(itemsBought + " items bought.");
System.out.println("Money left over: ¥" + funds);
}
}这是Java高效编程上的例子。
我测试过没有问题,你试下~~
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货