如何将一个double转换为NSInteger?
截断是隐式转换:
NSInteger theInteger = theDouble;
这是假设你没有检查值NSInteger的的范围内。如果你想做到这一点,你必须添加一些分支:
NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
// ...
} else if (theDouble < NSIntegerMin) {
// ...
} else {
theInteger = theDouble;
}
正是我在找什么,谢谢。增加了检查范围的好处,除非我不用担心这一点。再次感谢! – 2011-01-12 16:48:50
NSInteger的是一个C类型的类型定义。所以你可以这样做:
double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;
其中,根据C规范,将截断originalNumber。
但无论如何,假设你要没有四舍五入,我相信这应该只是
double myDouble = 10.4223;
NSInteger myInt = myDouble;
编辑四舍五入:(我敢肯定,那里有一个更简单的(和准确)的方式来做到这一点。(这还没有考虑负数或最大边界)
double myDecimal = myDouble - myInt;
if(myDecimal < 0.50)
{
//do nothing
}
else
{
myInt = myInt + 1;
}
NSInteger的是一个typedef,它就像使用一个int只是分配像值:
double d;
NSInteger i = d;
JesseNaugher提到四舍五入,我注意到OP需求被一个简单的truncate满足,但是本着完全泛化的精神,值得记住在调用floor()以实现舍入之前向double添加0.5的简单技巧。扩展乔纳森Grynspan的评论:NSInteger myInt = floor(myDouble + 0.5);
即,在绝对条款四舍五入。如果取整意味着四舍五入,则需要更复杂的方法:NSInteger myInt = floor(myDouble + (myDouble < 0.0 ? -0.5 : 0.5));
你想要NSInteger而不是NSNumber的任何原因?你也想四舍五入吗? – 2011-01-12 16:44:29
现在我想起来了,把它凑到一起很好。 – 2011-01-12 16:46:49