在Android中,Math.round会返回一个十进制数字。

3

我有这个函数:

enemigo.posZ = 5.1529696E8 //This is the value at runtime, it's a float.
double posicionZ = Math.round(enemigo.posZ*100.0f)/100.0f;

这是输出结果,但为什么?它应该将其四舍五入到整数!

posicionZ = 2.1474836E7

9
2.1474836E7是一个整数。它是21474836的科学计数法表示。 - Tunaki
请注意,第二个倒数位置有一个“E”。 - Psytho
抱歉,我不知道!所以看起来是服务器端的一个错误。 - D4rWiNS
那么如果我只想将它舍入为3个字符,我该怎么做? - D4rWiNS
1
在你将它从其他你不想要的数字中分离出来后,对它进行四舍五入。 - XxGoliathusxX
显示剩余2条评论
1个回答

2

以21474开头并且有很多位数字的整数可能是一个提示!

Java有两个版本的Math.round()

public static int Math.round(float a)    // float  -> 32-bit int
public static long Math.round(double a)  // double -> 64-bit long

让我们来看一下代码:

double posicionZ = Math.round(enemigo.posZ * 100.0f) / 100.0f;

由于enemigo.posZ是一个浮点数,因此使用第一个版本。它想要返回enemigo.posZ * 100.0,即51529696000.0,作为32位整数,但是它无法完成,因为它溢出了。因此,它返回Integer.MAX_VALUE,或2^³¹ - 1 = 2147483647。然后除以100.0f得到21474836.0,即2.1474836E7。


为使其正常工作,我需要将参数转换为 long 吗? - D4rWiNS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接