为什么.NET中的ceiling返回Double而不是整数?

24

此处所述,Math.Ceiling返回:“大于或等于 a 的最小整数值”。但后面又说明:“请注意,该方法返回的是 Double 类型而不是整数类型。” 我想知道为什么?

3个回答

31

因为双精度浮点数的最大值比整数支持的最大值要大得多。

如果请求一个具有大于Int32.MaxValue(甚至Int64.MaxValue)值的double,如果返回一个整数将是不可能的。


像那样想。谢谢。 - Anders Rune Jensen
4
@blgnklc说的是10的负一次方等于0.1,而不是0.01。但是这与Math.Ceiling有什么关系呢? - Tim Goodman

2
我认为那个“注释”的目的是确保人们不会被“整数值”这个短语误导,以为返回值一定是整数类型。正如其他答案所指出的那样,并非所有的整数值都可以存储在整数类型中。

如果他们能够链接到积分的正式定义,那就太好了 :-) - Anders Rune Jensen
1
@Anders:如果他们只是说“返回一个双精度类型,其值是大于或等于a的最小整数”,那就太好了。他们基本上只是用“积分值”来表示“整数”(这是完全正确的,但我个人更喜欢避免使用这种用法,因为“积分”一词会让人们想到微积分之类的东西)。 - Tim Goodman
是的,我同意,这样会好很多。为什么不把它变成维基页面,这样我们就可以修复它了? :-) - Anders Rune Jensen

1

最大整数类型的范围仍然比Double小得多。因此,许多有效的double值将没有Ceiling()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接