2012-03-08 8 views
0

私が今ビルドしているアプリでは、実際に小さな数字(4.12027703723203E-187.685842358296843E-216.882072376426952E-242.7150860398820128E-27など)を使用しています。精度を失うことなくダブルを保存する

問題は、私は、彼らがコードのビットは0になる配列にそれらを格納していたときにということである。

-(BOOL)checkNewInfo:(NSIndexPath*)indexPath andValue:(double)value { 
    //code omitted 
    [self.theValues replaceObjectAtIndex:indexPath.row withObject:[NSString stringWithFormat:@"%f", value]]; 
    //code omitted 
} 

私はいくつかのデバッグを行なったし、ここでの結果です:

(gdb) p (double) value 
$1 = 4.12027703723203e-18 
(gdb) po [self theValues] 
<__NSArrayM 0x6a45dc0>(
1.6086921836575816E-11, 
3.7511646463463610E-13, 
0.000000, 
4.6856843535196843E-21, 
9.820723621786952E-24 
) 

最初の数字はテキストファイルからのもので、簡単にアクセスして使用することができます。

そこで、インデックス2(旧5.12027703723203E-18、新しい4.12027703723203E-18)の番号を置き換えました。理論的には数は変わるべきではありませんが、実際には0.000000になります。

番号を保持するにはどうすればよいですか?

は、任意のヘルプは大幅に

答えて

1

%eまたは%Eを使用してみてください。 %fは常に0.00000形式で表示されます

-1

あなたの唯一のオプションは、バイナリ形式で数値を格納することですいただければ幸いです、ありがとうございます。

2

%fを使用しているときにフォーマットすると、出力は0.00000になります。

16桁の精度を維持する場合は、%e、または%.16eを使用する必要があります。

[self.theValues replaceObjectAtIndex:indexPath.row withObject:[NSString stringWithFormat:@"%.16e", value]]; 
2

1.)
2、文字列としてではなく、NSNumbeとして、またはより良い値を格納しないでください)使用NSDecimalNumber(128ビット浮動小数点)

関連する問題