2017-09-05 152 views
1

所以我被分配到写一个程序,提示用户,并为双读取输入的数值(最大输入为[99.99] 99美元,99美分),我的编程类,这将代表一笔金额。我然后确定最少数量的各钞票和硬币来代表所述量所需的(10美元的钞票是所需的最大尺寸)。Java的货币面额四舍五入问题

我遇到四舍五入的问题。例如,输入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"); 

    } 

} 
+2

我总是用金钱计算的整数。将价值表示为美分。 100将是1美元。 – JJF

+0

谢谢!我继续前进,只是将inputAmount变量转换为分,并解决了所有问题! –

回答

0

你会好起来的转换数字为整数(硬币的量)和计算基础上,作为这样就可以避免浮点错误,你现在正在经历的类型(它们是造成由浮点数表示为二进制)

如果通过使用this步骤(您需要硬编码输入使用它),你可以看到错误。

的变化量作为设置由于98.99999999999949 20行四舍五入,所以这就是为什么一分钱去失踪

+0

感谢您的帮助!我继续,只是根据什么@JJF说过转换的inputAmount分钱,然后转换该金额为整数。之后,我只需要将所有美元面值的因素乘以100,这似乎解决了所有问题。 –