【问题标题】:Java Money Denomination Rounding IssuesJava 货币面额四舍五入问题
【发布时间】:2018-02-14 03:14:38
【问题描述】:

因此,我被分配为我的编程课编写一个程序,该程序会提示用户并将输入的值读取为双精度值(最大输入为 [99.99] 九十九美元和九十九美分),这将代表一个货币金额。然后,我将确定代表所述金额所需的每张钞票和硬币的最少数量(10 美元钞票是所需的最大尺寸)。

我遇到了四舍五入的问题。例如,输入 99.99 将返回 3 便士,而它应该是 4 便士。我的老师明确告诉我不要超出课堂上所涵盖的材料(仅限于创建扫描仪、转换数据类型和强制转换。这意味着没有 BigDecimal)。任何帮助将不胜感激。

import java.util.Scanner;

public class MoneyConversion
{
     public static void main(String[] args)
     {
          //Set variables for input, dollars, and cents
          double inputAmount, change;
          int tens, fives, ones;
          int quarters, dimes, nickels, pennies;

          //Create scanner to setup for user input
          Scanner scan = new Scanner(System.in);

          //Scan user input and store into double
          System.out.print("Enter monetary amount: ");
          inputAmount = scan.nextDouble();

          //Extract demical or cent amount from dollar amount
          change = (inputAmount - (int) inputAmount) * 100;

          System.out.println("That's equivalent to:");

          //Extract and print denomination for ten-dollar bills
          tens = (int) inputAmount / 10;
          inputAmount = inputAmount % 10;
          System.out.println(tens + " ten dollar bills");

          //Extract and print denomination for five-dollar bills
          fives = (int) inputAmount / 5;
          inputAmount = inputAmount % 5;
          System.out.println(fives + " five dollar bills");

          //Extract and print denomination for one-dollar bills
          ones = (int) inputAmount;
          System.out.println(ones + " one dollar bills");

          //Extract and print denomination for quarters
          quarters = (int) change / 25;
          change = change % 25;
          System.out.println(quarters + " quarters");

          //Extract and print denomination for dimes
          dimes = (int) change / 10;
          change = change % 10;
          System.out.println(dimes + " dimes");

          //Extract and print denomination for nickels
          nickels = (int) change / 5;
          change = change % 5;
          System.out.println(nickels + " nickels");

          //Convert value for change to integer value and print for pennies
          pennies = (int) change;
          System.out.println(pennies + " pennies");

     }

}

【问题讨论】:

  • 我总是使用整数来计算金钱。将值表示为美分。 100 就是 1 美元。
  • 谢谢!我继续,只是将 inputAmount 变量转换为美分,这就解决了一切!

标签: java type-conversion rounding file-conversion


【解决方案1】:

您最好将数字转换为整数(便士的数量)并在此基础上进行计算,因为这样可以避免您现在遇到的浮点错误类型(它们是由浮点数表示为二进制).

如果您使用this 逐步完成(您需要对输入进行硬编码才能使用它),您可以看到错误。

零钱设置为98.99999999999949,因为第20行四舍五入,所以少了一分钱

【讨论】:

  • 感谢您的帮助!我继续根据@JJF 所说的将 inputAmount 转换为美分,然后将该金额转换为整数。之后,我只需将所有美元面额的因子乘以 100,这似乎解决了所有问题。
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多