美文网首页
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的货币计算

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

  • BigDecimal使用(整理)

    应用场景 大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。比如:货币 使用 ...

  • 货币金额的计算 - Java中的BigDecimal

    java中数字的计算事件很烦,也很容易出错的地方,比如网上找来的这样的例子 你觉得他们输出的结果会是多小呢? 0....

  • JAVA基础教程书目录

    使用Java示例计算圆形区域 使用Java示例计算圆周 使用Java示例计算矩形区域 使用Java示例计算矩形周长...

  • 理解虚拟机jvm的工作原理

    1:什么是jvm 是运行所有Java程序的抽象计算机,运行所有Java程序的抽象计算机,是Java语言的运行环境,...

  • iOS NSDecimalNumber货币计算

    在iOS开发中,遇到和货币价格计算相关的,对计算精度要求比较高。使用float类型运算,经常出现误差。为了解决这种...

  • 货币汇率计算

    今天steam游戏开发时,游戏内置商店商品价格定价只有人民币(CNY);而没有其他币种价格的设置,于是做了一个简单...

  • 货币市场基金收益的计算

    货币市场基金收益的计算 目前我国的货币市场基金均每日计算收益,但是有两种不同的收益结转份额方式:有的基金每日将当日...

  • BigDecimal的使用

    float、double 用于科学计算或工程计算 涉及金额的精确计算(商业计算),使用java.math.BigD...

  • 宝典秘籍二(未来希望)

    云计算 国产芯片 数字中国 国产软件 数字货币

网友评论

      本文标题:JAVA的货币计算

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