每次我使用Math.Round/Floor/Ceiling我总是施放int(或者long如果必要的话).double如果它总是返回一个整数,为什么它们会返回.
Mar*_*ers 29
结果可能不适合int(或long).双倍的范围要大得多.
双倍的近似范围:±5.0×10 -324至±1.7×10 308
我同意Mark的回答,结果可能不适合a long,但你可能想知道:如果C#有更长的long类型怎么办?好吧,这是Python中使用它的任意长度整数所发生的事情:
>>> round(1.23e45)
1229999999999999973814869011019624571608236032
Run Code Online (Sandbox Code Playgroud)
大多数数字是来自浮点舍入误差的"噪声".在C#中返回Round/ Floor/ Ceiling返回的动机的一部分可能double是为了避免错误精确的错觉.
另一种解释是.NET Math模块使用用C编写的代码,其中floor和ceil返回浮点类型.