美文网首页
JAVA的货币计算

JAVA的货币计算

作者: as_pixar | 来源:发表于2019-12-10 15:44 被阅读0次

    我们去超市买糖果,口袋里有1块钱,货柜上的糖果有 1角钱,2角钱,3角钱,等等,每个都想买一颗回家吃,接下来我们写一个买糖果的程序

    
    package com.as.improve;
    import java.math.BigDecimal;
    
    /**
     * 购买糖果的货币计算
     * 
     * @author as_pixar
     */
    public class BuySweetsForCurrency{
    
        public static void main(String[] args) {
            // float double 比较精确类型,不能用于货币计算
            // BigDecimal 精确类型,用于货币计算,速度有点慢,写法上也有些麻烦,速度可以忽略。
            System.out.println(1.03 - 0.42); // 0.61 != 0.6100000000000001 错误结果
            System.out.println(1.00 - 9 * 0.10); // 0.1 != 0.09999999999999998 错误结果
    
            buyGoods1();
    
            buyGoods2();
    
            buyGoods3();
        }
    
        // 错误购买四颗糖 1
        private static void buyGoods1() {
            int itemsBought = 0; // 可以买几块糖果
            double funds = 1.00; // 总共有1元
            double price = 0.10;// 第一块糖果1角钱
            for (; funds > price; price += 0.10) {
                funds -= price;
                itemsBought++;
            }
            String result = "买" + itemsBought + "块糖果,还剩零钱¥" + funds;
            System.out.println(result);
        }
    
        // 正确购买四颗糖  2
        private static void buyGoods2() {
            int itemsBought = 0; // 可以买几块糖果
            BigDecimal funds = new BigDecimal("1.00"); // 总共有1元
            BigDecimal TEN_CENTS = new BigDecimal("0.10"); // 第一块糖果1角钱
            for (BigDecimal price = TEN_CENTS; funds.compareTo(price) >= 0; price = price.add(TEN_CENTS)) {
                itemsBought++;
                funds = funds.subtract(price); // 每买一块糖果还剩多少钱
            }
            String result = "买" + itemsBought + "块糖果,还剩零钱¥" + funds;
            System.out.println(result);
        }
    
        // 正确购买四颗糖  3
        private static void buyGoods3() {
            int itemsBought = 0;
            int funds = 100;
            for (int price = 10; funds >= price; price += 10) {
                funds -= price;
                itemsBought++;
            }
    
            String result = "买" + itemsBought + "块糖果,还剩零钱¥" + funds;
            System.out.println(result);
        }
    
    }
    
    

    输出结果
    0.6100000000000001
    0.09999999999999998
    买3块糖果,还剩零钱¥0.3999999999999999
    买4块糖果,还剩零钱¥0.00
    买4块糖果,还剩零钱¥0

    项目地址 https://github.com/githubwwj/ImproveJava

    相关文章

      网友评论

          本文标题:JAVA的货币计算

          本文链接:https://www.haomeiwen.com/subject/xtsggctx.html