0

変数が直接入力された場合(つまり、(5.00、20.00)、変更は完全に計算されますが、値を購入と金額に置き換えても、変更は計算されませんか?

public static void makeChange()
   {

       double purchase;
       double tendered;

       Scanner scan = new Scanner (System.in);

       System.out.println ("How much was the Purchase?");
       purchase = scan.nextDouble(); 
       System.out.println ("Amount Tendered"); 
       tendered = scan.nextDouble();


       System.out.println("Processing Transaction");
       int ch[] = cd.makeChange(purchase, tendered); // does not calculate change correctly





           ...continued
4

1 に答える 1

3

算術演算とを使用した比較を使用してdoubleいます。これにより、中間値が。で正確に表すことができない数値になるとすぐに、予測できない結果が生成されますdouble。たとえば、次のような無邪気なループについて考えてみます。

double value = 1.0;
double dime = 0.1;
while (value > 0) {
   value -= dime;
   System.out.println(value);
}

これは印刷します:

0.9
0.8
0.7000000000000001
0.6000000000000001
0.5000000000000001
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457E-16
-0.09999999999999987

その理由についての詳細は、ここで見つけることができます:すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

前の質問で示唆されたように、double変数をBigDecimalsに変更すると、問題はなくなると思います。

于 2012-07-24T08:15:17.623 に答える