1

こんにちは私は学校の課題の変更計算機を作成しているときに問題が発生しています。それは本質的に、特定の金額に必要な最小の変更額を計算することです。

  • 元。5.36ドル:
  • 2ドル(2 $)
  • 1ルーニー(1 $)
  • 1四半期
  • 1ダイム
  • 0ニッケル
  • 1ペニー

値と合計を一緒に計算できるように、すべての変数をdoubleであると述べました。整数(5.00、6.00、7.00)では問題なく動作するようですが、小数点以下を追加すると混乱します。私が5.25ドルと言うときのように、2ドル硬貨1ルーニーと1クォーターと言うべきです。丸め誤差か、計算に問題がある可能性があると思います。どんな助けでも大歓迎です。コードの計算は次のとおりです。

//Rounding to one number           
DecimalFormat oneDigit = new DecimalFormat ("#,0");

//Ask user for input
String moneyinput = JOptionPane.showInputDialog ("Welcome to the Change Caluculator. "
                + "Please Enter your amount of money in Dollars ($): ");

//Take user input and create into string.
totmoney = Double.parseDouble (moneyinput);

//Calculate number of toonies
numtoonies =  (totmoney/toonieval);

System.out.println ("There is a total of " + oneDigit.format (numtoonies) + " toonies.");

//Find new amount
totmoney = (totmoney%toonieval);

//Calculate the number of loonies
numloonies = (totmoney/loonieval);

//Find new amount
totmoney = (totmoney-numloonies);

System.out.println ("There is a total of " + oneDigit.format (numloonies) + " loonies.");

//Calculate number of quarters
numquarters = (totmoney/quarterval);

//State the about of Coins
System.out.println ("There is a total of " + oneDigit.format (numquarters) + " quarters.");
}
4

3 に答える 3

3

なぜDecimalFormatを使用しているのかよくわかりません。%modと除算だけでこれを解決できるはずです/

これが私がこの問題に取り組む方法です:

  1. ユーザーからの入力を受け取ります(5.33形式のdoubleとして)
  2. 小数点以下を移動してintとして保存します(int値=コスト* 100)
  3. 除算を使用して2ドル硬貨の数を求めます(numToonies = value / toonieval)
  4. (値=値%toonieval)で残りの金額を見つけます
  5. 他の金種については、手順3と4を繰り返します。

注:使用した価格に100を掛けたという事実を反映するために、トゥーニーの値を変更する必要があります。

于 2012-04-13T01:16:13.067 に答える
1

これは浮動小数点数に対して適切に機能しているとは思いません。

totmoney = (totmoney%toonieval);

試す

totmoney = totmoney - toonieval*numtoonies;

代わりは。

また、浮動小数点値は一般に金銭的値の処理には適していないことに注意してください(丸め誤差の可能性があるため)。代わりに固定小数点の小数を使用してください(基本的に、値をセントで格納し、セントベースですべてを計算します)。

于 2012-04-13T01:17:39.647 に答える
1

絶対精度が必要な場合は、浮動小数点数を使用しないでください。javaが従うIEEE浮動小数点仕様では、浮動小数点仕様はすべての浮動小数点演算を適切に表すことができないため、精度が失われるとさえ述べられています。これに対する解決策は、値を2つの整数で格納する必要があることです。1つは小数点以下の金額用で、もう1つは小数点以下の値用です。

于 2012-04-13T07:39:51.537 に答える