2016-12-23 9 views
0

私のプロジェクトでパーセンテージを計算したいと思います。私はそのために倍を使用しています。私に正しいデータ型を小数点で計算するには、5.368の18%が正確に0.966を与えるようにしてください。小数点の割合を計算するために正しいデータ型を倍にしていますか?

結果を小数点以下3桁に切り捨てたい。

することは、私はこれを使用しています:

EditText kundan = (EditText) findViewById(R.id.kundan); 
double kundangiven = Double.parseDouble(kundan.getText().toString()); 
EditText loss = (EditText)findViewById(R.id.losspercentage); 
double lossinkundan = Double.parseDouble(loss.getText().toString()); 
losspercent = (lossinkundan * kundangiven)/100 ; 
losspercent = losspercent % 10 ; 
displayTotalloss(losspercent); 
+0

見てください(http://stackoverflow.com/questions/27598078/float-and-double-datatype-in​​-java)、それは助けるかもしれません。 Double、btw、正しいタイプですimho –

+0

あなたのコードではまったく動作しません。 –

+0

結果部分私は小数部を0.000 –

答えて

1

あなたの元のコードは、ダブルスで収納率の計算に関して正常に動作します。結果を小数点以下3桁までフォーマットする場合は、String.format()を使用してください。

String.format("%.3f", losspercent); 
+0

10進数は数字です。小数位*を意味しますか? – EJP

+0

私は整数ではなく、取られた任意の数を意味しました。 –

+0

それは私に結果を与えていない...私は正しくコーディングすることはできません単純な小数点の除算と思います。私は例を与えている。5.368 OF 0.966を与える必要があります –

2

今、私はより良いあなたのニーズを理解していること、これは表示のための精度のdouble 3桁を取得する方法である:

String.format("%.3f", losspercent);

これはStringを返すので、それを返すことができます表示関数に直接渡されるか、タイプ変数に格納されるString

正しいデータ型を使用して保存するかどうかを確認するように聞こえるようですあなたの計算されたパーセンテージ、またはより良いオプションがあるかどうか。

あなたの現在のコード構造を考えると、私はそうだと言います。doubleは正しい選択です。整数でない数値を除算する(またはそのために掛け合わせる)ときには、正確な結果には入力より出力の精度が高いことが必要です。 floatの代わりにdoubleを使用するメモリコストはおそらく無視できるので、doubleは明らかな選択肢のようです。

本当に本当に正確さを心配している場合は、BigDecimalを使用できます。 BigDecimalはプリミティブではありませんので、メモリと処理ではより多くのコストがかかります(この例では目立たないかもしれませんが)。

「正しい」データ型を実際に使用したい場合、コードベースを制御できる場合は、独自のデータ型を作成できます。私はそれがここでは不要だと思う。 doubleは完全に適しています。読みやすさが懸念される場合は、double xint pを持つ関数を作成し、pパーセントを表すdoubleをxとして返します。

関連する問題