pol*_*nts 17
没有不一致之处:这些方法的设计遵循不同的规范.
long round(double a)
long
参数的值.double floor(double a)
double
小于或等于参数且等于数学整数的最大(最接近正无穷大)值.double ceil(double a)
double rint(double a)
double
参数值最接近的值,并且等于数学整数所以通过设计round
轮到a long
和rint
轮到a double
.自JDK 1.0以来一直如此.
在JDK 1.2加入其它的方法(例如toRadians
,toDegrees
); 在1.5中加入其他人(例如log10
,ulp
,signum
等),并且还更一些是在1.6中加入(例如copySign
,getExponent
,nextUp
等)(查找时间:在文档中的元数据); 但round
和rint
一直相依为命,他们现在是从一开始的方式.
可以说,也许是代替long round
和double rint
,它会是更多的"一致"他们的名字double round
和long rlong
,但这是议论文.也就是说,如果你坚持断然称这是"不一致",那么原因可能就像"因为它是不可避免的"一样令人不满意.
以下是Effective Java 2nd Edition,第40项:设计方法签名的引用:
如有疑问,请查看Java库API以获取指导.虽然存在许多不一致 - 考虑到这些图书馆的规模和范围,这是不可避免的 - 但也有相当多的共识.
int num = Integer.getInteger("123")
扔NullPointerException
?floor
将被选择匹配math.h中的标准c例程(rint
在另一个答案中提到,也存在于该库中,并返回a double
,如在java中).
但round
当时不是c中的标准函数(在C89中没有提到 - c标识符和标准 ; c99确实定义round
并且它返回一个double
,如你所料).语言设计师"借用"想法是正常的,所以也许它来自其他语言?fortran 77没有该名称的功能,我不确定当时还有什么用作参考.也许vb - 确实有,Round
但不幸的是,这个理论,它返回一个double
(PHP也).有趣的是,perl 故意避免定义回合.
[更新:嗯.看起来像smalltalk返回整数.我不太了解smalltalk知道这是否正确和/或一般,并且该方法被调用rounded
,但它可能是源. smalltalk确实在某些方面影响了java(虽然在概念上比在细节上更多).]
如果它不是smalltalk,那么我们留下的假设是某人只是选择不好(鉴于在Java中可能存在隐式转换,在我看来返回a double
会更有用,因为它可以在转换类型时使用在进行浮点计算时).
换句话说:java和c共有的函数往往与当时的c库标准一致; 其余的似乎是任意的,但这种特殊的皱纹可能来自smalltalk.
归档时间: |
|
查看次数: |
16812 次 |
最近记录: |