这里很简单的问题。我有一个双我希望转换回NSInteger,截断到单位的地方。我会怎么做?如何将一个double转换为NSInteger?
6
A
回答
14
截断是隐式转换:
NSInteger theInteger = theDouble;
这是假设你没有检查值NSInteger的的范围内。如果你想做到这一点,你必须添加一些分支:
NSInteger theInteger = 0;
if (theDouble > NSIntegerMax) {
// ...
} else if (theDouble < NSIntegerMin) {
// ...
} else {
theInteger = theDouble;
}
+0
正是我在找什么,谢谢。增加了检查范围的好处,除非我不用担心这一点。再次感谢! – 2011-01-12 16:48:50
4
NSInteger的是一个C类型的类型定义。所以你可以这样做:
double originalNumber;
NSInteger integerNumber = (NSInteger)originalNumber;
其中,根据C规范,将截断originalNumber。
1
但无论如何,假设你要没有四舍五入,我相信这应该只是
double myDouble = 10.4223;
NSInteger myInt = myDouble;
编辑四舍五入:(我敢肯定,那里有一个更简单的(和准确)的方式来做到这一点。(这还没有考虑负数或最大边界)
double myDecimal = myDouble - myInt;
if(myDecimal < 0.50)
{
//do nothing
}
else
{
myInt = myInt + 1;
}
1
NSInteger的是一个typedef,它就像使用一个int只是分配像值:
double d;
NSInteger i = d;
0
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));
相关问题
- 1. 如何将Double []转换为double []?
- 2. 如何将NSString的值转换为NSInteger
- 3. 如何将NSIndexPath转换为NSInteger?
- 4. 如何将NSinteger转换为字符串
- 5. 如何将NSInteger转换为NSTimeInterval
- 6. 如何将NSString转换为NSInteger
- 7. 如何将NSDecimalNumber转换为NSInteger?
- 8. 如何将NSDecimal值转换为NSInteger值?
- 9. 如何将NSInteger转换为NSTimeInterval
- 10. 如何将一个NSDictionary值转换为NSInteger
- 11. 如何在Scala中将Array [(Double,Double)]转换为Array [Double]?
- 12. 如何将double转换为字符串?
- 13. 如何将列表[Double]转换为列?
- 14. 如何将SQL_NUMERIC_STRUCT转换为double和string?
- 15. 如何将InputStream.read()转换为double?
- 16. 如何将double转换为hex?
- 17. 如何将double转换为String?
- 18. 如何将"转换为double qoutes
- 19. 如何将std :: string_view转换为double?
- 20. 如何将double转换为HH:MM:SS ObjectiveC
- 21. 如何将int转换为double?
- 22. C#:如何将TimeSpan值转换为double?
- 23. 如何将`SInt16'转换为'double'?
- 24. 如何将short []转换为double []?
- 25. 如何将%02d:%02d:%02d转换为double?
- 26. 如何将char *转换为double *?
- 27. 转换一个NSString到一个NSInteger
- 28. 如何将System.Object的确是一个int32 []转换为double []?
- 29. 无法将double转换为double [] error
- 30. 无法将'double(_cdecl *)()'转换为'double'
你想要NSInteger而不是NSNumber的任何原因?你也想四舍五入吗? – 2011-01-12 16:44:29
现在我想起来了,把它凑到一起很好。 – 2011-01-12 16:46:49