2017-03-28 4 views
-1

私は通貨変換のアンドロイドアプリケーションで作業していますが、倍精度に倍精度を乗ろうとしていますが、乗算後に正しい値が得られません。私もBigDecimalを試しても、正しい量を得られませんでした。倍を乗算する最良の方法は何でしょうか?あなたが短い小数の事項の正確な表現通貨の計算、のようなものをやっている場合は、それがすべてでダブル関与しないことが最良であるBigDecimalを2倍を乗算する方法

   second_amount = Double.parseDouble(); 
       bdf = new BigDecimal(second.getText().toString()); 
       //first_amount = Double.parseDouble(first.getText().toString()); 
       bds = new BigDecimal(second.getText().toString()); 
       BigDecimal bdr = bdf.multiply(bds); 
       //result = first_amount * second_amount; 
       second.setText("" + bdr); 
+0

あなたは正しいダブルスを得ています。あなたが理解していないことは、ダブルスの仕組みです。倍精度は無限の精度ではなく、10進数を格納しません。 2進数 - 2と1/2の累乗を格納します。したがって、.3のような単純な部分は正確に二重に格納されません。 –

+0

正しい値の代わりに何を得ていますか?私はあなたが乗算を正しく行っていると言わなければなりません。 –

+0

@ OleV.V。私が1.9062に100を掛けていると、私は1910.00になります –

答えて

3

を使用した後

second_amount = Double.parseDouble(second.getText().toString()); 
       first_amount = Double.parseDouble(first.getText().toString()); 
       result = first_amount * second_amount; 
       second.setText("" + df.format(result)); 

。数値の元の文字列表現を直接BigDecimalコンストラクタに渡し、BigDecimalで算術演算を行います。

たとえば、new BigDecimal("0.1")は値0.1を有しているが、倍にリテラルの変換に丸めに起因する非常にわずかに異なる値0.1000000000000000055511151231257827021181583404541015625を、new BigDecimal(0.1)有します。

+0

ありがとう、あなたは私の一日を救った。それは魔法のように働いた。 –