Math.round /用长值划分问题

时间:2011-08-26 19:16:33

标签: java rounding long-integer

我将长值除以1000并将其四舍五入为整数时遇到问题。

我的长期价值是:1313179440000

我的代码是

long modificationtime = 1313179440000;
Math.round(modificationtime/1000l)

如果我打印出分割和格式化的值,它会返回给我: 1313179392

如此。

value   : 1313179440000
expected: 1313179440
got     : 1313179392

我不知道为什么会这样。 有人能帮助我吗?

最好的问候, prdatur

2 个答案:

答案 0 :(得分:10)

正在使用

Math.round(float)。 float的范围比long长,但它不能代表该范围内的所有整数 - 在这种情况下整数1313179440(该部门的原始结果)所在在超出整数精度的范围部分。

  1. 不要使用Math.round,因为它不需要(输入已经是整数!),或者;

  2. 使用Math.round(double),如:Math.round(modificationTime/1000d)。请注意,除数是double,因此表达式的被除数(和结果)也被提升为double。

  3. 快乐的编码。

答案 1 :(得分:3)

您获得该结果的原因是Math.Round()接受double。由于您的号码不能完全代表double,因此传入 的最接近的号码。

请注意,round()完全没必要。 modificationTime/1000l不需要四舍五入。如果您执行需要舍入,请将参数更改为modificationTime/1000d