划分整数类型 - 结果是否可预测?

时间:2011-11-09 11:37:41

标签: c# integer-division

我有64位长,我想要舍入到最近的10,000,所以我做的很简单:

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

这看起来像我期望的那样,但由于我不是100%关于整数类型如何划分的内部因素,我只是担心可能会出现这种情况不能按预期工作的情况。

这仍然适用于非常大的数字/边缘情况吗?

2 个答案:

答案 0 :(得分:4)

是的,只要没有结果,中间或其他结果超过long.MaxValue,它就会起作用。

要明确您的常量,您最后可以使用L说明符,例如123456789L

对于像这样的直接计算,我可以建议来自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它会查找边缘情况并测试它们。这是一个简洁的例子,但是如果你根据你不确定的东西建立了很多逻辑,那么这是一个很好的工具。

答案 1 :(得分:1)

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

但是,为特定用例编写一些测试可能会很好,包括边缘情况。这会让你放心。