回答
有沒有更好的方法,但如果你能避免它,你真的不應該這樣做。 NSNumber
作爲標量數字的包裝存在,因此您可以將它們存儲在集合中,並將它們與其他NSObjects
進行多態傳遞。它們並不是真的用來存儲實際數學中的數字。如果你對它們進行數學計算,它比僅對標量執行操作要慢得多,這可能是爲什麼沒有方便的方法。
例如:
NSNumber *sum = [NSNumber numberWithFloat:([one floatValue] + [two floatValue])];
是最小的21個指令吹消息調度,並且也不管代碼的方法採取拆箱和REBOX值(可能是幾百)做1個指令價值的數學。
所以,如果你需要存儲的類型的字典號碼使用NSNumber
,如果你需要傳遞的東西,可能是一個數字或字符串成一個函數使用NSNumber
,但如果你只想做數學棒與標C型。
NSDecimalNumber(的NSNumber子類)擁有所有你正在尋找的東西:
– decimalNumberByAdding:
– decimalNumberBySubtracting:
– decimalNumberByMultiplyingBy:
– decimalNumberByDividingBy:
– decimalNumberByRaisingToPower:
...
如果計算性能很感興趣,然後轉換爲C++數組的std ::向量或喜歡。
現在我從不再使用C陣列了;使用錯誤的索引或指針很容易崩潰。並且非常繁瑣地將每個新的[]與delete []配對。
您可以使用
NSNumber *sum = @([first integerValue] + [second integerValue]);
編輯: 如ohho觀察到,這個例子是用於相加持有整數值的兩個NSNumber
實例。如果你想加起來持有浮點值的兩個NSNumber
的,你應該做到以下幾點:
NSNumber *sum = @([first floatValue] + [second floatValue]);
在斯威夫特您可以通過使用Bolt_Swift庫https://github.com/williamFalcon/Bolt_Swift得到這個功能。
例子:
var num1 = NSNumber(integer: 20)
var num2 = NSNumber(integer: 25)
print(num1+num2) //prints 45
目前top-voted answer將會導致難以診斷的錯誤和精度損失由於使用花車。如果您正在對NSNumber值進行數字操作,則應先轉換爲NSDecimalNumber,然後對這些對象執行操作。
NSDecimalNumber,NSNumber的的不可變的子類,提供了這樣做的基10算術的面向對象的包裝。一個實例可以表示可被表示爲尾數×10 ^指數任何數,其中尾數是十進制整數高達38位長,和指數是從-128至127
的整數。因此,應轉換你的NSNumber實例通過[NSNumber decimalValue]
的方式分配給NSDecimalNumbers,完成你想要的任何算術運算,然後當你完成後重新分配給NSNumber。
在Objective-C:
NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithDecimal:one.decimalValue]
NSDecimalNumber *b = [NSDecimalNumber decimalNumberWithDecimal:two.decimalValue]
NSNumber *result = [a decimalNumberByAdding:b]
在斯威夫特3:
let a = NSDecimalNumber(decimal: one.decimalValue)
let b = NSDecimalNumber(decimal: two.decimalValue)
let result: NSNumber = a.adding(b)
- 1. 添加兩個pandas.series對象
- 2. 如何增加一個NSNumber
- 3. 添加兩個json對象並排序
- 4. 添加java對象兩次
- 5. 鈦如何添加2合併兩個Ti.Media.sound對象?
- 6. 添加對象到NSArray作爲NSNumber numberWithBool:NO - ObjC到Xamarin
- 7. 添加對象關聯兩個現有對象
- 8. 如何將對象添加到對象?
- 9. 如何向JComponent添加多個對象?
- 10. Swift 3創建一個NSNumber對象
- 11. 鑄造爲一個NSNumber的doubleValue添加額外[幻象]精度
- 12. 如何將對象添加到對象的每個陣列
- 13. 如何在Javascript中的另一個對象內添加對象?
- 14. 如何確定對象是否是一個NSNumber
- 15. 兩次添加相同的對象
- 16. 添加到一個對象
- 17. 將兩個動畫添加到一個對象[到圖像]
- 18. 添加對象到對象
- 19. 添加對象
- 20. 如何將兩個不同範圍對象中的值添加到angularjs中的單個範圍對象中
- 21. 如何在PowerShell中的多個JSON對象添加到一個JSON對象
- 22. 如何將第二個對象的值添加到第一個對象?
- 23. 如何將一個modelAndView對象添加到另一個ModelAndView對象
- 24. 如何將downloadUrl添加到firebaseDB對象?
- 25. 如何添加對象到場景?
- 26. 如何在three.js中添加邊對象?
- 27. 如何通過對象添加z-index?
- 28. 如何將NSMutableArray添加到對象中?
- 29. 如何將NSDictionary對象添加到NSMutableArray?
- 30. 如何添加到用戶對象Node.JS
我想補充一點,如果你需要存儲,你打算做了很多數學數的集合 - 也許你真的想要一個適當的數字類型的C風格的數組? – 2009-01-30 06:53:41
無論何時你需要使用標量來進行大量的數學運算,當你需要多態性或需要適應現有的容器時,您都希望使用這些對象。 – 2009-01-30 07:36:02
NSNumber上的正確方法是'numberWithFloat:' - 也許這從回答時起就已經改變了。 – Nick 2010-11-30 03:29:21