我有64位长,我想要舍入到最近的10,000,所以我做的很简单:
long myLong = 123456789
long rounded = (myLong / 10000) * 10000; //rounded = 123450000
这看起来像我期望的那样,但由于我不是100%关于整数类型如何划分的内部因素,我只是担心可能会出现这种情况不能按预期工作的情况。
这仍然适用于非常大的数字/边缘情况吗?
答案 0 :(得分:4)
是的,只要没有结果,中间或其他结果超过long.MaxValue
,它就会起作用。
要明确您的常量,您最后可以使用L
说明符,例如123456789L
。
对于像这样的直接计算,我可以建议来自Microsoft的Pex(http://research.microsoft.com/en-us/projects/pex/),它会查找边缘情况并测试它们。这是一个简洁的例子,但是如果你根据你不确定的东西建立了很多逻辑,那么这是一个很好的工具。
答案 1 :(得分:1)
是的,它会起作用。整数除法的语义保证了你的期望。
但是,为特定用例编写一些测试可能会很好,包括边缘情况。这会让你放心。