31

私はJavaで非常に単純な除算をしています(これは製品の数量/時間あたりの生産です)が、この除算を行うたびに奇妙なエラーが発生します:

float res = quantity / standard;

上記の分割をいくつかの値で試しましたが、常にエラーが発生しますが、他の場所で試して正しくなったのは次のとおりです。

世界のどこでも:

13.6 = 6800 / 500;

ジャワ:

13.0 = 6800 / 500;

BigDecimal と BigInteger を調査しましたが、この除算を作成する方法が見つかりませんでした。精度エラーなしで Java でこの除算を行う方法は他にありますか??

どんな助けでも大歓迎です。

4

4 に答える 4

81

整数を除算しています。つまり、整数除算を使用しています。

整数除算では、結果の小数部分が破棄されます。

次のことを試してください。

float res = (float) quantity / standard;
            ^^^^^^^

上記により、分子が a として扱われるようになり、float分母も同様に float になり、int 除算の代わりに float 除算が実行されます。

リテラルを扱っている場合は、変更できることに注意してください

float f = 6800 / 500;

f分母を浮動小数点数にする接尾辞を含めるには、次のようにします。

float f = 6800f / 500;
              ^
于 2011-09-02T16:46:40.170 に答える
4

精度が気になる場合doubleは、精度の桁数が 2 倍以上の which を使用することをお勧めします。ただし、浮動小数点は、合計または 0.5 の累乗である分数のみを正確に表します。これは、0.6 が近似的にしか表現されていないことを意味します。これは、適切な丸めの問題である必要はありません。

double d = (double) 6800 / 500;

また

double d = 6800.0 / 500;
于 2011-09-02T17:08:24.373 に答える
-1

こんにちは、これを試してみてください。あなたの要件を満たすのに役立つかもしれません

double percent=(7819140000l-3805200000l)*100f/7819140000l;

public String format_Decimal(double decimalNumber) {
		NumberFormat nf = NumberFormat.getInstance();
		nf.setMaximumFractionDigits(5);
		nf.setMinimumFractionDigits(2);
		nf.setRoundingMode(RoundingMode.HALF_UP);
		String x = nf.format(decimalNumber);
		return x;
	}

于 2016-09-02T06:55:44.240 に答える