0

我有一个返回浮点数的过程。然后我使用该roundToDecimals方法消除一些数字。

roundToDecimals(weight,3)

----2012 年 6 月 22 日更新:凌晨 1.42 点----

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的二进制浮点 ( double, float) 表示。只有“最接近 0.333 的值”,如果你使用它,你会得到

double d = 0.333;

(我假设您在抱怨您的roundToDecimals方法的结果,我假设它是 a floator double。从您的问题中很难判断。)

于 2012-06-21T18:39:30.480 回答
0

你的方法不可能奏效。您不能将浮点值四舍五入到特定的小数位数,因为浮点值没有小数位。它有二进制位置。如果您想要小数位,您必须转换为十进制基数,例如通过DecimalFormatBigDecimal

于 2012-06-22T00:09:11.747 回答