-1

私はアンドロイドアプリケーションを構築しています。私のアプリでは、倍精度 (たとえば 42.42) を切り上げ、切り上げるために元の数値に追加した金額を取得できる必要があります。私の現在のコードは機能しておらず、その出力は 0..とにかくこれを修正するには?

私の現在のコード:

                float rounded = FloatMath.ceil(val);
                double getDecimal = (val - FloatMath.floor(val))*100;
                int noDecimal = (int) ((int) 100-getDecimal);
                float toadd = (noDecimal/100);

私のコードでは、「丸められた」変数は単純な丸めであり、「toadd」はそれに追加した量でなければなりません。何らかの理由で toadd は常に 0 として返されます。

4

3 に答える 3

2

あなたはで割っnoDecimalてい100ます。どちらもintであり、結果は常にintになります。この場合、それは0と1の間の整数であり、常に0に切り捨てられます。

%11( )を法とする数値を取得してから、元の数値の上限を取得することの何が問題になっていますか?

完全を期すために、最後の行を変更して残りのロジックを保持することができます。

float toadd = noDecimal/100.0;

これにより除数がfloatに変更され、除数をyieldで除算するとfloatが生成intされfloatます。

于 2012-10-02T11:55:17.433 に答える
1
float toadd = (noDecimal/100);

これにより、小さい整数を大きい整数で除算するため、0が得られます。

このようにしてみてください:-

float toadd = (Float.valueOf(noDecimal)/100);

また、以下のコードで型キャストを2回行う必要はありません。

int noDecimal = (int) ((int) 100-getDecimal);

ただ、アウターキャストで十分です:-

int noDecimal = (int) (100-getDecimal);

編集:-また、この種の問題にはBigDecimalを使用することをお勧めします。

于 2012-10-02T11:55:00.677 に答える
1

何かが足りないか、あなたの意図を正しく理解していないのかもしれませんが、追加したものを知りたいだけなら、違いを使用してみませんか?

float rounded = FloatMath.ceil(val);

float toadd = rounded-val;

編集:コメントで述べたように、これは必ずしも完全に正確な結果をもたらすとは限りません。BigDecimalしかし、より高い精度を提供する で使用できるのは一般的な考え方です。

于 2012-10-02T12:00:50.457 に答える