[解決済み】Java double.MAX_VALUE?
2022-02-12 13:31:52
質問
私の課題では、ガス会社のためにガスメーターシステムを作成する必要があり、従業員が新しい顧客アカウントを作成し、名前や単価などのデータを修正し、アカウントからお金を引き出す(入金する)ことができます。
コンストラクタを作成し、オーバーロードのメソッドも追加しましたが、現在、次の名前のメソッドを起動するときに問題が発生しています。 預金 のような他のメソッドでは、ユーザーのアカウントからお金を取ることになっています。 記録単位 これにより、従業員は顧客が使用したガスメーターの数値をインポートし、その顧客の口座の残高を更新することができます。
プリセットされた情報だけでプログラムをテストしたとき、入金方法を開始しようとすると、次のようになります。
Account.deposit(Double.MAX_VALUE);
この意味がよくわからないのですが、どうにかしてこれを乗り越える方法はないでしょうか?
テストデータとコードは以下の通りです。
public class TestGasAccount
{
public static void main (String [] args)
{
GasAccount Account = new GasAccount (223,"Havana","TQ",1000);
Account.getAccNo();
Account.getName();
Account.getAddress();
Account.getUnits();
Account.getBalance();
Account.recordUnits(1000);
Account.getUnits();
Account.getBalance();
Account.deposit(Double.MAX_VALUE);
}
}
ブレーク
public class GasAccount
{
private int intAccNo;
private String strName;
private String strAddress;
private double dblBalance;
private double dblUnits;
protected double dblUnitCost = 0.02;
public GasAccount(int intNewAccNo,String strNewName,String strNewAddress,double dblNewUnits)
{
intAccNo = intNewAccNo;
strName = strNewName;
strAddress = strNewAddress;
dblUnits = dblNewUnits;
dblBalance = dblNewUnits * dblUnitCost;
}
public GasAccount (int intNewAccNo, String strNewName, String strNewAddress)
{
intAccNo = intNewAccNo;
strName = strNewName;
strAddress = strNewAddress;
}
public double deposit (Double dblDepositAmount)
{
dblBalance = dblBalance - dblDepositAmount;
return dblBalance;
}
public String recordUnits (double dblUnitsUsed)
{
double dblTempBalance;
dblTempBalance = dblUnitsUsed * dblUnitCost;
dblBalance = dblBalance + dblTempBalance;
dblUnits = dblUnits + dblUnitsUsed;
return "Transaction Successful";
}
public int getAccNo ()
{
System.out.println(intAccNo);
return intAccNo;
}
public String getName()
{
System.out.println(strName);
return strName;
}
public String getAddress()
{
System.out.println(strAddress);
return strName;
}
public double getBalance()
{
System.out.println("£"+dblBalance);
return dblBalance;
}
public double getUnitCost()
{
return dblUnitCost;
}
public double getUnits ()
{
System.out.println(dblUnits);
return dblUnits;
}
public void updateUnitCost (double dblNewUnitCost)
{
dblUnitCost = dblNewUnitCost;
}
}
解決方法は?
ダブル.MAX_VALUE は double が表現できる最大値です (1.7*10^308 程度)。
これは、あるデータ型の可能な最大値を引こうとすると、いくつかの計算問題が発生することになるはずです。
お金を扱う場合、浮動小数点値を使うべきではありませんが、特に丸め誤魔化していると問題が発生します(システム内のお金が多いか少ないかのどちらかになってしまいます)。
関連
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】koch snowflake java recursion
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み] 二項演算子「&」のオペランド型がおかしい java
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】予期しない型エラー
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】koch snowflake java recursion
-
[解決済み】Javaでお金に使用するデータ型は?[クローズド]