所以我在货币面额上使用java。大部分代码工作正常,但唯一的问题是便士。我遇到的问题是,在输入一定金额时,它会不会遗漏1个便士。显然我们假设使用math.round()将double值转换为等价的long值,如果我们想要精度,则表示美分....但我遇到的最大问题是我甚至不明白这意味着什么,甚至更不用说了解如何实现math.round()。 我们也给了这个.... Math.round(金额* 100)。我没有期待任何答案,但如果有人能给我任何明确或指示,你可以指出我。我很高兴地欣赏它,因为我现在真的很困惑和卡住了。
import java.util.Scanner;
public class MoneySorter {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
double money;
System.out.printf("");
money = stdin.nextDouble();
int hundreds, fifty, twenties, tens, fives, ones;
int quarters, dimes, nickles, pennies;
hundreds = (int) money / 100;
money = money % 100;
fifty = (int) money / 50;
money = money % 50;
twenties = (int) money / 20;
money = money % 20;
tens = (int) money / 10;
money = money % 10;
fives = (int) money / 5;
money = money % 5;
ones = (int) money / 1;
money = money % 1;
quarters = (int) (money / 0.25);
money = money % 0.25;
dimes = (int) (money / 0.10);
money = money % 0.10;
nickles = (int) (money / 0.05);
money = money % 0.05;
pennies = (int) (money / 0.01);
如果我输入金额,则会有一些例子:0.99
Result:
3 Quarters
2 Dimes
3 Pennies
示例2:127.97
1 Hundred
2 Twenties
1 Five
2 Ones
3 Quarters
2 Dimes
1 Penny
答案 0 :(得分:1)
不要声明:
double money;
...而是声明:
long money;
然后替换:
money = stdin.nextDouble();
...与:
money = Math.round(stdin.nextDouble() * 100);
现在意识到你以便士为主要货币单位,而不是美元。这意味着您必须将后面的大部分乘以100.例如:
hundreds = (int) money / 10000;
money = money % 10000;
等等,直到你到达:
nickles = (int) (money / 5);
money = money % 5;
pennies = (int) money;
答案 1 :(得分:0)
如果应用程序正在处理货币计算,最好使用BigDecimal。 BigDecimal类用于执行高精度算术,可用于基于银行或金融域的应用程序 https://www.w3resource.com/java-tutorial/java-big-decimal-class.php
BigDecimal money;
System.out.printf("Enter the value: ");
money = new BigDecimal(stdin.nextDouble());
BigDecimal hundreds;
hundreds = money.divide(new BigDecimal(100), RoundingMode.CEILING).setScale(2);