如何将double转换为NSInteger?

sud*_*-rf 6 iphone numbers objective-c

这里很简单的问题.我有一个双重,我希望转换回NSInteger,截断到单位的地方.我该怎么办?

Jon*_*pan 15

截断是一种隐式转换:

NSInteger theInteger = theDouble;
Run Code Online (Sandbox Code Playgroud)

假设您没有检查该值是否在NSInteger的范围内.如果你想这样做,你将不得不添加一些分支:

NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
    // ...
} else if (theDouble < NSIntegerMin) {
    // ...
} else {
    theInteger = theDouble;
}
Run Code Online (Sandbox Code Playgroud)

  • 你在评论中提到了四舍五入.使用`ceil(theDouble)`进行四舍五入,使用`floor(theDouble)`进行四舍五入.请记住,对于负数,向上舍入向零舍入,向下舍入向负向无穷大舍入. (3认同)

Tom*_*mmy 5

NSInteger 是 C 类型的 typedef。所以你可以这样做:

double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;
Run Code Online (Sandbox Code Playgroud)

根据 C 规范,这将截断originalNumber。