でのBigDecimalを使用してアイテムの価格を実装し、私は他の場所でそのfloatまたはdoubleを読んfield.I価格は丸め誤差とのBigDecimalによる通貨フィールドのために使用すべきではありません持っているItemForSaleをモデルにしたいですこのpurpose.Iのための適切なタイプは、これらのクラスを作成しているWebアプリケーションのJava
class ItemForSale {
private String name;
private BigDecimal price;
...
}
class MyUtils{
...
public static BigDecimal parsePriceOfItem(String priceStr){
BigDecimal price;
BigDecimal zero = new BigDecimal(0);
try{
price = new BigDecimal(priceStr);
}catch(NumberFormatException nfe){
price = zero;
}
if(price.doubleValue() < zero.doubleValue()){
price = zero;
}
return price;
}
}
が、これは(ユーザーが入力した通り)の価格文字列を解析するための正しい方法ですか?私は否定し、無効な文字列を扱うたかった(「ABCD」と言います) 0
もっと良い方法があれば教えてください
のおかげ
マーク
+1:または92233,720,368,547,758.07を持つことができます。これより大きい値を持つ場合は、BigDecimalを使用します;) –
@PeterLawrey:はい、縮尺の整数を使用できますが、どうしてでしょうか? BigDecimal **は**スケーリングされた整数なので、通貨を表すのに理想的です。また、任意の方法でパーセンテージを処理できます。なぜ車を再発明し、BigDecimalが既に何をしているのですか?定数のスケーリングは、BigDecimalを使用するよりも高速ではありません。 –
@RudyVelthuis BigDecimalは妥当な選択肢ですが、まだ扱いにくく、言語サポートはありません。これは、コードの読み取りと検証がはるかに難しいことを意味します。開発者のオーバーヘッドであり、BigDecimalを使用する際の保守性が向上しますが、これは最大の問題です。バランスを取るために、私は人々に 'double 'を適切に(丸めて)使用することを学ぶことを勧めます。これは私の経験で維持するのが最も簡単です。 –