我有一个返回浮点数的进程。然后我使用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
有谁知道如何处理这类问题?
答案 0 :(得分:2)
考虑你的0.333案例。 没有二进制浮点(double
,float
)表示,正好 0.333。只有“最接近0.333的值”,如果您使用
double d = 0.333;
(我假设您抱怨roundToDecimals
方法的结果,我认为这是float
或double
。很难从您的问题中得知。)
答案 1 :(得分:0)
你的方法不可行。您不能将浮点值舍入到特定的小数位数,因为浮点值不会具有小数位。它有二进制位置。如果你想要小数位,你必须转换为十进制基数,例如通过DecimalFormat
或BigDecimal
。