84

これは簡単なはずですが、どうすれば2つを合計できNSNumberますか?のようなものです:

[one floatValue] + [two floatValue]

またはより良い方法が存在しますか?

4

6 に答える 6

148

本当に良い方法はありませんが、回避できるのであれば、これを行うべきではありません。NSNumberスカラー数のラッパーとして存在するため、コレクションに格納して、他の。と多形的に渡すことができますNSObjects。実際の数学で数値を格納するために実際に使用されることはありません。それらに対して計算を行う場合、スカラーのみに対して操作を実行するよりもはるかに低速です。これが、便利なメソッドがない理由である可能性があります。

例えば:

NSNumber *sum = [NSNumber numberWithFloat:([one floatValue] + [two floatValue])];

メッセージディスパッチで少なくとも21の命令を吹き飛ばしていますが、1命令に相当する計算を行うために、メソッドが値(おそらく数百)を箱から出し、箱に戻すために必要なコードはたくさんあります。

したがって、dictに数値を格納する必要があるNSNumber場合は、を使用します。数値または文字列である可能性のあるものを関数に渡す必要がある場合は、を使用しますNSNumberが、スカラーC型で数学スティックを実行するだけの場合は。

于 2009-01-30T00:02:09.377 に答える
50

NSDecimalNumberNSNumberのサブクラス)には、探しているすべての機能があります。

– decimalNumberByAdding:
– decimalNumberBySubtracting:
– decimalNumberByMultiplyingBy:
– decimalNumberByDividingBy:
– decimalNumberByRaisingToPower:

..。

計算パフォーマンスに関心がある場合は、C++配列std::vectorなどに変換します。

今ではC-Arrayを使用しなくなりました。間違ったインデックスまたはポインタを使用してクラッシュするのは簡単すぎます。そして、すべての新しい[]をdelete[]とペアリングするのは非常に面倒です。

于 2011-06-23T19:48:59.490 に答える
12

使用できます

NSNumber *sum = @([first integerValue] + [second integerValue]);

編集: ohhoで観察されたように、この例はNSNumber整数値を保持する 2 つのインスタンスを合計するためのものです。NSNumber浮動小数点値を保持する2 つの を加算する場合は、次の手順を実行する必要があります。

NSNumber *sum = @([first floatValue] + [second floatValue]);
于 2013-11-14T14:15:03.033 に答える
-2

Swift では、Bolt_Swift ライブラリhttps://github.com/williamFalcon/Bolt_Swiftを使用してこの機能を取得できます。

例:

  var num1 = NSNumber(integer: 20)
  var num2 = NSNumber(integer: 25)
  print(num1+num2) //prints 45
于 2015-05-17T13:09:31.583 に答える