2013-09-26 65 views
-1

目前我正在尝试在java中编写更改机器。出于某种原因,转换过程中准确度有很大的损失。奇准确度错误Java

它会首先询问欠款多少和付多少的数据值。然后它将划分宿舍的数量并修改其余部分。然后它会用硬币,镍币,然后便士来执行此操作。之后,它会打印出多少变化。

import java.io.*; 
import static java.lang.System.*; 

import java.util.Scanner; 

class change{ 


    public static void main (String str[]) throws IOException { 

      //asker thingy 
      Scanner scan = new Scanner(System.in); 
      System.out.println("Please enter the Cost of the Item:"); 
      System.out.print("$"); 
      double costowed = scan.nextDouble(); 
      System.out.println("Please Enter the Amount Payed:"); 
      System.out.print("$"); 
      double costpayed = scan.nextDouble(); 

      //Quarters 
      double a1 = Math.round((costpayed - costowed) * 100); 
      int quarters = (int)(a1/25); 
      int a2 = (int)(a1 % 25); 

      //dimes 
      int dimes = (int)(a2/10); 
      int a3 = (int)(a1 % 10); 

      //nickles & pennies 
      int nickles = (int)(a3/5); 
      int pennies = (int)(a1 % 5); 

      //change owed 
      double arc = (double)(a1/100); 

      //print sequence 
      System.out.println("Change owed: " + arc); 
      System.out.println("Quarters: " + quarters); 
      System.out.println("Dimes: " + dimes); 
      System.out.println("Nickles: " + nickles); 
      System.out.println("Pennies: " + pennies); 
    } 

} 
+3

首先 - 究竟是什么问题?其次,我建议你使用BigDecimal来赚钱。 –

+0

只是一个方面的说明,但你不需要包括这些的加利福尼亚或to鱼呢?关于改变的法案呢?或者,如果支付的金额和物品价格之间的差距很大,你是否只给出了一个万亿的收入? –

+1

@ miss.serena - 这是一个两位操作,最多只有四分之一的变化。 –

回答

1

线

int a3 = (int)(a1 % 10); 

应该是:

int a3 = (int)(a2 % 10); 

而且同样int pennies = (int)(a1 % 5);应该int pennies = (int)(a3 % 5);