我有一个 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/ ),它会寻找边缘情况并对其进行测试。这是一个简洁的示例,但是如果您基于不确定的事物构建大量逻辑,那么它是一个很棒的工具。
是的,它会起作用。整数除法的语义保证了你所期望的。
但是,为您的特定用例编写一些测试可能会很好,包括边缘情况。这会让你放心。