分割整数类型-结果可预测吗?

本文关键字:结果 整数 类型 分割 | 更新日期: 2023-09-27 18:14:01

我有一个64位的长度,我想把它舍入到最接近的10000,所以我做了一个简单的:

long myLong = 123456789
long rounded = (myLong / 10000) * 10000; //rounded = 123450000

这似乎做了我所期望的,但由于我不是100%了解整数类型如何被划分的内部,我只是稍微担心可能存在这种情况,这不会像预期的那样工作。

这在非常大的数字/边缘情况下仍然有效吗?

分割整数类型-结果可预测吗?

是的,只要没有结果,中间或其他,超过long.MaxValue,它将工作。

要明确您的常量,您可以在末尾使用L说明符,例如123456789L

对于这样简单的计算,我可以推荐微软的Pex (http://research.microsoft.com/en-us/projects/pex/),它会查找边缘情况并进行测试。这是一个清晰的例子,但是如果你要基于你不确定的东西构建大量的逻辑,它是一个很好的工具。

是的,它会工作。整数除法的语义保证了你所期望的。

然而,为您的特定用例(包括边缘用例)编写一些测试可能是好的。