我的应用程序浮动,产生无穷大:
float fx = eddystoneAdvEvtCurr_mA * txTime_ms / (eddystoneFrame.interval / 1000);
返回61,333333(3)
。我尝试将其转换为String
并拆分,转换为int
,但无效。我可以从中提出61,33
或61,3
吗?当我将其转换为int
时,它会返回奇怪的值:2147483647
。这看起来很简单,但我花了很多时间来搞清楚。
答案 0 :(得分:0)
您可以剪切这样的数字:
float fx = eddystoneAdvEvtCurr_mA * txTime_ms / (eddystoneFrame.interval / 1000);
float fxRounded= ((int)(100*fx))/100.f
fxRounded应为61,33
这个想法:
int
(此逗号后面的所有数字的缩减)/100.
而不是/100
)以保持结果数字右边的逗号这是我测试的代码:它打印:61.33
public class T{
public static void main(String[] args){
float fx = 61.3333333333f;
float fxRounded=((int)(100*fx))/100.f;
System.err.println(""+fxRounded);
}
}
答案 1 :(得分:0)
要了解浮点数如何存储在JVM中,您可以查看此wikipedia article。 (您还可以查看JLS)
如果您想要具有修正精度,则应使用BigDecimal。例如:
BigDecimal ten = BigDecimal.valueOf(10);
BigDecimal three = BigDecimal.valueOf(3);
int precision = 2;
System.out.println(ten.divide(three, precision, BigDecimal.ROUND_CEILING));
输出:
3.34
答案 2 :(得分:0)
你可以使用
Math.round();
为double或float值的圆形