这里有一个非常简单的问题。我有一个double类型的变量,我想将其转换为NSInteger类型,并截断到个位数。应该如何操作?
这里有一个非常简单的问题。我有一个double类型的变量,我想将其转换为NSInteger类型,并截断到个位数。应该如何操作?
截断是一种隐式转换:
NSInteger theInteger = theDouble;
假设您未检查数值是否在NSInteger的范围内。如果要这样做,您需要添加一些分支:
NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
// ...
} else if (theDouble < NSIntegerMin) {
// ...
} else {
theInteger = theDouble;
}
ceil(theDouble)
可以向上取整,使用floor(theDouble)
可以向下取整。请记住,对于负数而言,向上取整是指朝着零的方向取整,向下取整是指朝着负无穷大的方向取整。 - Jonathan GrynspanNSInteger是C类型的一个typedef。所以你可以这样做:
double originalNumber;
NSInteger integerNumber = (NSInteger)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;
NSInteger myInt = floor(myDouble + 0.5);
即,在绝对意义上向上取整。如果“向上”取整意味着远离零的四舍五入,则需要更复杂的方法:NSInteger myInt = floor( myDouble + (myDouble < 0.0 ? -0.5 : 0.5) );