如何将double转换为NSInteger?

时间:2011-01-12 16:40:52

标签: iphone objective-c numbers

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

5 个答案:

答案 0 :(得分:14)

截断是一种隐式转换:

NSInteger theInteger = theDouble;

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

NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
    // ...
} else if (theDouble < NSIntegerMin) {
    // ...
} else {
    theInteger = theDouble;
}

答案 1 :(得分:4)

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

double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;

根据C规范,将截断originalNumber。

答案 2 :(得分:1)

但无论如何,假设你不想要舍入,我相信这应该可以正常工作

double myDouble = 10.4223;
NSInteger myInt = myDouble;

编辑舍入:(我确定这是一种更简单(和更精确)的方法...(这也不考虑负数或最大边界)

double myDecimal = myDouble - myInt;
if(myDecimal < 0.50)
{
//do nothing
}
else
{
myInt = myInt + 1;
}

答案 3 :(得分:1)

NSInteger是一个typedef,它与使用int相同。只需赋值如:

double d;
NSInteger i = d;

答案 4 :(得分:0)

JesseNaugher提到了四舍五入,我注意到OP的需求遇到了一个简单的截断,但本着完全泛化的精神,值得记住在调用floor()以实现舍入之前向double添加0.5的简单技巧。延伸Jonathan Grynspan的评论:NSInteger myInt = floor(myDouble + 0.5);,即以绝对条款进行四舍五入。如果舍入“向上”意味着从零开始四舍五入,则需要更复杂的方法:NSInteger myInt = floor( myDouble + (myDouble < 0.0 ? -0.5 : 0.5) );