1

現在、[NSDecimalNumber longLongValue]文字列で作成されたものは。を@"9999999999999999"返します10000000000000000

これは、クラスがその値を最初に変換し、 ()doubleに再変換することを意味しますSInt64signed long long

この動作を回避する方法は?の範囲内で正確な整数を取得したいSInt64

PS。またはに変換しNSStringて再変換することを検討しましたが、もっと良い方法があると思います。しかし、他に方法がないと確信している場合は、それを教えてください。SInt64NSScannerstrtoll

4

2 に答える 2

0

まず、パフォーマンスが重要であることが確実でない限り、文字列に書き込んでスキャンし直します。それが簡単な方法です。

さて、あなたが本当にそれを他の方法でやりたいのなら:

  1. NSDecimalあなたから得るNSDecimalNumber
  2. 構造体のプライベートフィールドをlong long操作し、仮数から値を初期化します(大きすぎる仮数を処理するためのチェックを導入する可能性があります)
  3. 10^exponentを掛けます。バイナリべき乗を使用してそれを行うことができます; もう一度、オーバーフローを確認します
于 2010-11-06T19:53:56.030 に答える
0

NSDecimalNumber*originalValueから始めます。

int64_tapprox =[originalValuelongLongValue]とします。これは正確ではありませんが、かなり近いです。

概算をNSDecimalNumberに変換し、originalValue-概算を計算し、longLongValueを取得して、概算に追加します。これで正しい結果が得られました。

于 2015-10-14T19:34:09.307 に答える