2-10 示例学习:整钱总零 

要点提示:本节展示一个程序,将一个大额的钱分成较小货币单位。

     假如你希望开发一个程序,将给定的钱数分成较小的货币单位。这个程序要求客户输入一个double型的值,该值是用美元和美分表示的总钱数,然后输出一个清单,列出和总钱数等价的最大数量的dollar(美分)、quarter(2角5分)、dime(1角)、nickel(5分)和penny(1分)的数目,按照这个顺序,从而使得硬币最少。

下面是开发这个程序的步骤:

1)提示用户输入十进制作为总钱数,例如11.56。

2)  将该钱数(例如11.56)转换为1分币的个数(例如1156)。

3)通过将1分币的个数除以100,求出1美分的个数。通过对剩余的1分币的个数除以100求余数,得到剩余1分币的个数。

4) 通过将剩余1分币的个数除以25,求出2角5分的个数。通过对剩余的1分币的个数除以25求余数,得到剩余1分币的个数。

5) 通过将1分币的个数除以10,求出1角的个数。通过对剩余的1分币的个数除以10求余数,得到剩余1分币的个数。

6) 通过将1分币的个数除以5,求出5分币的个数。通过对剩余的1分币的个数除以5求余数,得到剩余1分币的个数。

7) 剩余1分币的个数即为所求。

8) 显示结果。

完整的程序如程序清单2-10所示:

程序清单2 - 10  ComputeChange.java

package Second;import java.util.Scanner;public class Code10 {public static void main(String[] args) {//Creat aScannerScanner input = new Scanner(System.in);//Receive the amountSystem.out.println("Enter the amount in double, for example 11.56:");double amount = input.nextDouble();int remainingAmount = (int)(amount * 100);//Find the number of one dollarsint numberOfOneDollars = remainingAmount / 100;remainingAmount = remainingAmount % 100;//Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 25;remainingAmount = remainingAmount % 25;//Find the number of quarters in the remaining amountint numberOfDimes = remainingAmount / 10;remainingAmount = remainingAmount % 10;//Find the number of quarters in the remaining amountint numberOfNickels = remainingAmount / 5;remainingAmount = remainingAmount % 5;// Find the number of pennies in the remaining amountint numberOfPennies = remainingAmount;//Display resultSystem.out.println("Your amount " + amount + " consists of");System.out.println("   " + numberOfOneDollars + "double");System.out.println("   " + numberOfQuarters + "quarters");System.out.println("   " + numberOfDimes + "dimes");System.out.println("   " + numberOfNickels + "nickels");System.out.println("   " + numberOfPennies +"pennies");}}

输出

Enter the amount in double, for example 11.56:
11.56
Your amount 11.56 consists of11double2quarters0dimes1nickels1pennies

程序2-22

package Second;import java.util.Scanner;public class Code_22 {public static void main(String[] args) {//Creat aScannerScanner input = new Scanner(System.in);//Receive the amountSystem.out.println("Enter the amount in double, for example 1156:");int amount = input.nextInt();int remainingAmount = (int)(amount * 100);//Find the number of one dollarsint numberOfOneDollars = remainingAmount / 10000;remainingAmount = remainingAmount % 10000;//Find the number of quarters in the remaining amountint numberOfQuarters = remainingAmount / 100;remainingAmount = remainingAmount % 100;//Display resultSystem.out.println("Your amount " + amount + " consists of");System.out.println("   " + numberOfOneDollars + "double");System.out.println("   " + numberOfQuarters + "quarters");}}

输出

Enter the amount in double, for example 1156:
1156
Your amount 1156 consists of11double56quarters

Java *2.22(财务应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值。例如:1156就表示11美元56美分。相关推荐

  1. Java黑皮书课后题第2章:*2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值

    *2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题.以整数值作为输入,其最后两位代表的是美分币值 题目 题目概述 举例 程序清单2-10 修改思路 ...

  2. Java黑皮书课后题第4章:*4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为int型值时可能会造成精度损失的问题。读取的输入值是一个字符串,比如“11.56“

    *4.26(金融应用:货币单位)重写程序清单2-10,解决将float型值转换为int型值时可能会造成精度损失的问题.读取的输入值是一个字符串,比如"11.56" 题目 题目概述 ...

  3. Java黑皮书课后题第4章:*4.10(猜测生日)改写程序清单4-3,提示用户输入字符Y代表“是”N代表“否”,代替之前输入1表示“是”,0表示“否

    *4.10(猜测生日)改写程序清单4-3,提示用户输入字符Y代表"是"N代表"否",代替之前输入1表示"是",0表示"否 题目 题 ...

  4. Java int转float 精度损失

    int n = 123456789; float f =n; 打印f,发现f=1.23456792E8,发生了精度损失. 我起初的疑问,float取值范围比int取值范围大,为什么会出现精度损失那? ...

  5. Java黑皮书课后题第7章:7.16(执行时间)编写程序,随机产生一个包含100 000个整数的数组和一个关键字。估算调用程序清单7-6中的linearSearch方法的执行时间

    7.16(执行时间)编写程序,随机产生一个包含100 000个整数的数组和一个关键字.估算调用程序清单7-6中的linearSearch方法的执行时间 题目 题目描述 程序清单7-6的linearSe ...

  6. Java黑皮书课后题第7章:*7.6(修改程序清单5-15)程序清单5-15通过检验2、3、4…n/2是否是数n的因子来判断n是否为素数。判断n是否素数的更高效的方法是检验小于等于根n的素数是否有n整

    *7.6(修改程序清单5-15)程序清单5-15通过检验2.3.4-n/2是否是数n的因子来判断n是否为素数.判断n是否素数的更高效的方法改写5-15 题目 题目描述 破题 程序清单5-15(非本题代 ...

  7. java 校验姓名只能包含中英文_java代码验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数...

    package com.sangedabuliu.www; import java.util.regex.Matcher; import java.util.regex.Pattern; public ...

  8. Java注解方法实现BigDecimal保留两位小数(案例详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  9. java保留小数点后面两位(四舍五入)

    java保留小数点后面两位(四舍五入)学习记录 三个方法: 1.使用String.format("%.2f",num);     //num是要处理的数据 这种方法可以用float ...

最新文章

  1. 2016年全球芯片市场或衰退2.13%
  2. Python 之字典常用方法
  3. DCMTK:DSRTree和DSRTreeNodeCursor类的测试程序
  4. HarmonyOS之常用组件Button的功能和使用
  5. JavaScript jQuery获取radio/下拉框的选中值
  6. 为什么学好计算机就必须学好汇编?
  7. 云效Codeup代码评审中的代码协同
  8. Flex DataGrid 筛选实现
  9. Vue默认插槽、具名插槽、作用域插槽及使用作用域插槽删除列表项
  10. vs2005用正则表达式统计有效代码行数
  11. ubuntu16.04下安装wine及TIM
  12. 金属芯PCB中的贵族,热电分离铜基板(高导热380W)
  13. 计算机知识练习中公,计算机考试题库:计算机基础练习题(14)
  14. python实现BMI计算器
  15. LOTO 示波器软件功能——文件存储和回读功能
  16. 无人驾驶引发的变革比想象的更快,留给车企和老司机的时间已不多
  17. ec,easyclick常用函数大全,集合1
  18. 计算机在盲童音乐教学中的具体应用,盲童钢琴教学实践和教学方法探究
  19. php反序列化失败,php 反序列化报错及解决
  20. 新手小白如何快速学好PS平面设计?需要什么技巧?

热门文章

  1. 阿里云——云迁移中心
  2. div 配搭 display:inline-block
  3. JEECMS 自定义标签
  4. GIF表情包怎么制作 QQ动态图如何玩
  5. 一个iOS程序员的BAT面试经验
  6. Mybatis的学习
  7. python--Flask学习(七)--利用Flask中的werkzeug.security模块加密
  8. 读书笔记--项亮《推荐系统实践》第四章
  9. vscode登陆中国版leetcode
  10. 报错Field Mapper in xxx.xxxServiceImpl required a bean of type ‘dao.xxxMapper‘ that could not be found