我将长值除以1000并将其四舍五入为整数时遇到问题。
我的长期价值是:1313179440000
我的代码是
long modificationtime = 1313179440000;
Math.round(modificationtime/1000l)
如果我打印出分割和格式化的值,它会返回给我: 1313179392
如此。
value : 1313179440000
expected: 1313179440
got : 1313179392
我不知道为什么会这样。 有人能帮助我吗?
最好的问候, prdatur
答案 0 :(得分:10)
Math.round(float)
。 float的范围比long长,但它不能代表该范围内的所有整数 - 在这种情况下整数1313179440(该部门的原始结果)所在在超出整数精度的范围部分。
不要使用Math.round
,因为它不需要(输入已经是整数!),或者;
使用Math.round(double)
,如:Math.round(modificationTime/1000d)
。请注意,除数是double,因此表达式的被除数(和结果)也被提升为double。
快乐的编码。
答案 1 :(得分:3)
您获得该结果的原因是Math.Round()
接受double
。由于您的号码不能完全代表double
,因此传入 的最接近的号码。
请注意,round()
完全没必要。 modificationTime/1000l
不需要四舍五入。如果您执行需要舍入,请将参数更改为modificationTime/1000d
。