0

浮動小数点数を返すプロセスがあります。次に、このroundToDecimalsメソッドを使用して一部の桁を削除します。

roundToDecimals(weight,3)

---- 2012年6月22日更新:1.42 am ----

public static double roundToDecimals(double d, int c) {
int temp=(int)((d*Math.pow(10,c)));
return (((double)temp)/Math.pow(10,c));
}

---更新の終了

正常に動作しますが、最後の桁がゼロの場合、小数点以下3桁以上を返します。

0.0020
0.0060
0.333
0.071

誰かがこの種の問題に対処する方法を知っていますか?

4

2 に答える 2

2

あなたの 0.333 ケースを考えてみましょう。正確に0.333である2 進浮動小数点 ( , ) 表現ありません。使用した場合に得られる「0.333に最も近い値」だけがありますdoublefloat

double d = 0.333;

(私はあなたがあなたのroundToDecimalsメソッドの結果について不平を言っていると仮定しています。これはfloatorであると思いdoubleます。あなたの質問からはわかりにくいです。)

于 2012-06-21T18:39:30.480 に答える
0

あなたの方法はおそらくうまくいきません。浮動小数点値には小数点以下の桁数がないため、浮動小数点値を特定の小数点以下の桁数に丸めることはできませ。バイナリの場所があります。DecimalFormat小数点以下の桁数が必要な場合は、または などを使用して、小数点以下の基数に変換する必要がありますBigDecimal

于 2012-06-22T00:09:11.747 に答える