2011-11-09 25 views
1

我有一个64位长,我要向下舍到最近的10,000,所以我做一个简单的:划分整数类型 - 结果是否可预测?

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

这似乎做什么,我希望,但我不是100%在整数类型如何分解的内部,我只是稍微担心可能会出现这种情况,这种情况不能按预期的方式工作。

这仍然可以在非常大的数量/边缘情况下工作吗?

回答

4

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

为了明确您的常量,您可以在末尾使用L说明符,例如, 123456789L。对于像这样的直接计算,我可以建议来自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它寻找边缘案例并对其进行测试。这是一个干净利落的例子,但是如果你基于你不确定的东西建立了很多逻辑,那么这是一个很棒的工具。

1

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

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