`
mac521
  • 浏览: 4559 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

(二)找零钱

阅读更多
曾经有过这样一个场景:一个物品价值1.1元,但是顾客只有2元零钱,这时候需要计算找给顾客剩余的零钱。
//找零钱
public String calTimeOfChange(){
System.out.println(2.00 – 1.10);
}
是否会显示0.90呢?不会,而是会显示0.8999999999999999。这是什么原因呢?在组成原理课上是这样讲的:计算机计算数值时,整数与整数计算,分数与分数计算,然后将两者计算之和合并起来。同时小数在计算机中的表示,其最高位是不参与计算的。所以0.10在当作double被计算机表示时,只是一个被认为无限接近0.10的值,所以计算结果就不能像我们预期的那样了。
在java中有三种发式可以实现预期的效果:(运行于jdk1.5)
1)
public String calTimeOfChange(){
java.text.DecimalFormat decimalFormat = new java.text.DecimalFormat(“#.##”);
System.out.println(decimalFormat.format(2.00 -1.00));
}
2)
public String calTimeOfChange(){
//调用BigDecimal构造函数要传入String
java.math.BigDecimal i = new java.math.BigDecimal(“2.00”);
java.math.BigDecimal j = new java.math.BigDecimal(“2.00”);
System.out.println(i.subtract(j));
}
3)
public String calTimeOfChange(){
System.out.printf(“%.2f%n”, 2.00 – 1.10);
}
1
0
分享到:
评论
1 楼 xiquwgugou 2008-03-28  
1)
public String calTimeOfChange(){
java.text.DecimalFormat decimalFormat = new java.text.DecimalFormat(“#.##”);
System.out.println(decimalFormat.format(2.00 -1.00));
}
2)
public String calTimeOfChange(){
//调用BigDecimal构造函数要传入String
java.math.BigDecimal i = new java.math.BigDecimal(“2.00”);
java.math.BigDecimal j = new java.math.BigDecimal(“2.00”);
System.out.println(i.subtract(j));
}
3)
public String calTimeOfChange(){
System.out.printf(“%.2f%n”, 2.00 – 1.10);
}

相关推荐

    找零钱问题C++实现 找零钱问题

    根据给定的信息,这里涉及到两个不同的编程问题:第一个是经典的找零钱问题,第二个则是0/1背包问题的一个变种。 ### 找零钱问题 #### 核心思想 找零钱问题通常可以用动态规划来解决。其核心思想是:对于任意一个...

    找零钱2_找零钱_

    对于找零钱问题,我们可以创建一个二维数组dp,其中dp[i]表示达到金额i所需要的最少硬币数。 算法步骤如下: 1. 初始化:设置dp数组的初始值,如dp[0] = 0,表示不使用任何硬币时,找零为0元。 2. 遍历所有可用的...

    贪心算法 找零钱

    ### 贪心算法找零钱 #### 一、引言 在计算机科学与数学领域,贪心算法是一种解决问题的方法,它通过选择当前看起来最佳的选项来构建全局最优解。本篇文章将详细介绍如何使用贪心算法解决找零钱问题,并通过C语言...

    找零钱_fieldizh_找零钱问题_找零钱_

    对于找零钱问题,我们可以定义一个二维数组dp,其中dp[i][j]表示面值为i元的硬币可以凑出金额j的最小硬币数量。我们可以从最小的金额开始,逐渐增加,对于每个金额,遍历所有可能的硬币面值,更新dp[i][j]的值。 ...

    贪心算法 找零钱问题

    #### 二、找零钱问题概述 找零钱问题是指:给定一定金额的支付和几种不同面额的硬币,要求找出能够凑成该支付金额的硬币组合方式,且使用的硬币总数最少。例如,一个小孩买了价值为33美分的糖果,并支付了1美元,...

    软件测试实验报告——找零钱问题

    《软件测试实验报告——找零钱问题》详细分析 本次实验是关于软件测试的一个实践,主要目的是通过白盒测试方法来验证一个找零钱问题的C++程序的正确性。程序设计的目标是当顾客支付一定金额时,计算出找零的最佳...

    动态规划之找零钱问题

    对于找零钱问题,我们可以定义一个二维数组`dp[i][j]`,其中`i`表示当前考虑的硬币种类,`j`表示目标金额。`dp[i][j]`的值表示使用前`i`种硬币找`j`金额时所需的最少硬币数。初始化时,`dp[0][j] = j`(因为不使用...

    Java实现找零钱计算

    Java实现找零钱计算 本实验报告的主要目的是使用Java语言实现找零钱计算,使得所照张数最少。下面将详细介绍实验的目的、要求、原理、步骤、数据和计算结果等。 一、实验目的 本实验的目的是使学生学会在Java环境...

    伪造硬币找零钱

    对于"伪造硬币问题",使用了二分搜索来定位伪造硬币,而"找零钱问题"的代码通过嵌套循环寻找所有可能的组合,并选择组合中硬币总数最少的一种。 通过这个实验,学生可以深入理解分治法和贪心算法的核心思想,以及...

    c#编写的代码包括递归的排列和半数集,动态规划的导弹问题,贪心算法的找零钱问题

    在找零钱问题中,给定一组面额的硬币和一个目标金额,贪心策略可能是在每次选取最大面额的硬币,直到达到目标金额或者没有硬币可选。然而,贪心算法并不总是适用于所有情况,因为有些找零问题可能需要回溯或动态规划...

    C语言找零钱问题贪心算法

    在找零钱问题中,可以创建一个二维数组,表示不同金额下最小硬币数量,通过递推关系填充数组,最终得到目标金额的最小硬币数量。 另一方面,回溯法是一种通过尝试所有可能的组合来搜索最优解的算法。在找零钱问题中...

    动态规划之找零钱问题.zip

    对于找零钱问题,我们可以创建一个二维数组`dp`,其中`dp[i][j]`表示用前`i`种硬币找`j`金额所需的最少硬币数量。 假设我们有硬币面值`coins = [1, 2, 5, 10, ...]`,我们需要找出找`amount`金额所需的最少硬币数。...

    软件测试-找零钱最佳组合的测试用例

    在软件测试领域,找零钱最佳组合的问题是一个典型的算法测试案例,它涉及到计算机科学中的动态规划和优化问题。这个问题的基本设定是:用户支付一定金额,系统需要找出最少数量的硬币来提供找零,这些硬币应具有不同...

    leetcode找零钱问题动态规划-AlgorithmDay:LeetCode每日一练

    leetcode找零钱问题动态规划 2020.10.12开启每日刷题模式。这里记录每日刷题进展与代码目录情况~ 如果对时间复杂度的要求有 \loglog,通常都需要用到二分查找。 动态规划: 数据结构的存储方式只有两种:数组(顺序...

    java代码-凑零钱凑零钱

    在Java编程领域,"凑零钱凑零钱"这个标题可能指的是一个常见的算法问题,即找零钱问题。这个问题在实际应用中很常见,比如在零售店或自动售货机中,当用户支付了超过商品价格的钱时,系统需要计算出应该找回多少零钱...

    算法分析与设计实验.zip

    例如,线性搜索的时间复杂度为O(n),而二分查找的时间复杂度为O(log n)。空间复杂度则衡量了算法运行过程中所需的内存空间,这对于资源有限的环境至关重要。 3. **实验内容**:实验可能包括一系列经典问题的求解,...

    软件测试(单元测试)

    假设我们有一个用于计算找零钱最佳组合的程序。该程序根据顾客付款金额P和商品价格R来计算找零钱的最佳组合。这里的“最佳”指的是使用最少数量的货币单位来完成找零。货币单位包括50元、10元、5元和1元四种。 ####...

    黑盒测试设计

    #### 二、黑盒测试的设计原则与目标 **设计原则**: 1. **基于需求**:测试案例应直接来源于需求文档。 2. **覆盖范围**:尽可能覆盖所有功能和边界条件。 3. **有效性**:测试案例应当能够有效地检测出潜在的问题...

Global site tag (gtag.js) - Google Analytics