我有一个64位长,我要向下舍到最近的10,000,所以我做一个简单的:划分整数类型 - 结果是否可预测?
long myLong = 123456789
long rounded = (myLong/10000) * 10000; //rounded = 123450000
这似乎做什么,我希望,但我不是100%在整数类型如何分解的内部,我只是稍微担心可能会出现这种情况,这种情况不能按预期的方式工作。
这仍然可以在非常大的数量/边缘情况下工作吗?
我有一个64位长,我要向下舍到最近的10,000,所以我做一个简单的:划分整数类型 - 结果是否可预测?
long myLong = 123456789
long rounded = (myLong/10000) * 10000; //rounded = 123450000
这似乎做什么,我希望,但我不是100%在整数类型如何分解的内部,我只是稍微担心可能会出现这种情况,这种情况不能按预期的方式工作。
这仍然可以在非常大的数量/边缘情况下工作吗?
是的,只要没有结果,中间或其他,超过long.MaxValue
,它就会起作用。
为了明确您的常量,您可以在末尾使用L
说明符,例如, 123456789L
。对于像这样的直接计算,我可以建议来自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它寻找边缘案例并对其进行测试。这是一个干净利落的例子,但是如果你基于你不确定的东西建立了很多逻辑,那么这是一个很棒的工具。
是的,它会工作。整数除法的语义保证你所期望的。
但是,为您的特定用例(包括边缘案例)编写一些测试可能会很好。这会让你放心。