Java(1時間あたりの製品数量/生産量))には非常に単純な区分がありますが、この区分を行うたびに奇妙なエラーが発生します。
float res = quantity / standard;
私は上記の除算をいくつかの値で試してみましたが、常にエラーが発生しますが、他のどこでも試してみて、正しくなったのはこれです:
世界のどこでも:
13.6 = 6800 / 500;
Java:
13.0 = 6800 / 500;
BigDecimalとBigIntegerを調査しましたが、この除算を作成する方法を見つけられませんでした。精度のエラーなしでこの除算をJavaで行う他の方法はありますか??
どんな助けも大歓迎です。
整数を除算しています。つまり、整数除算を使用しています。
整数除算では、結果の小数部分は破棄されます。
以下を試してください:
float res = (float) quantity / standard;
^^^^^^^
上記は、分子をfloat
として処理することを強制します。これにより、分母も浮動になり、int除算の代わりにfloat除算が実行されます。
リテラルを扱っている場合は、変更できることに注意してください
float f = 6800 / 500;
f
接尾辞を含めて、分母を浮動小数点にする:
float f = 6800f / 500;
^
精度が心配な場合は、2桁以上の精度を持つdouble
を使用することをお勧めします。ただし、浮動小数点は、合計または0.5の累乗である分数のみを正確に表します。これは、0.6がほぼ表されることを意味します。これは、適切な丸めで問題になる必要はありません。
double d = (double) 6800 / 500;
または
double d = 6800.0 / 500;
私の場合、私はこれをやっていた:
double a = (double) (MAX_BANDWIDTH_SHARED_MB/(qCount+1));
「正しい」の代わりに:
double a = (double)MAX_BANDWIDTH_SHARED_MB/(qCount+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;
}