12

私は NSString を受け入れます

NSString *value = [valuelist objectAtIndex:valuerow];
NSString *value2 = [valuelist2 objectAtIndex:valuerow2];

UIPickerView から。したい

double *cal = value + (value2 * 8) + 3;


NSString *message =[[NSString alloc] initWithFormat:@"%@",cal];

計算を行った後、メッセージで文字列を取得できるはずです..助けてください プログラムがクラッシュしています

4

4 に答える 4

36
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];
于 2010-07-21T12:38:10.683 に答える
3

精度が低下する傾向があるため、doubleとstringの間で常に変換するべきではありません(一般に、精度を低下させたくない場合は、十分に注意する必要があります)。

たとえば、nextafter(1.0,2.0)1より大きい最小のdoubleを返します(正確には1.0000000000000002220446049250313080847263336181640625ですが、1.0000000000000002で満足しています)。「%g」でフォーマットすると、「1」が返されます。

NSNumberが正しいことをすることを期待しますが、[[NSNumber numberWithDouble:nextafter(1,2)] stringValue]「1」も返します。ドキュメントによると、「%0.16g」でフォーマットする-[NSNumber stringValue]呼び出し。[self descriptionWithLocale:nil]それでは十分じゃない。ただし、「%。17g」でフォーマットすることで正しい答えが得られます。ダブルスがIEEE75464ビットダブルスであり、ライブラリが正しく機能していれば、「%。17g」で十分だと思いますが、保証はありません。

結局のところ、その保証はありません[[NSString stringWithFormat:@"%.17g",n] doubleValue] == n

于 2010-07-21T13:09:04.733 に答える
1

受け入れられた回答はstring=>doubleのみを行うため、新しい回答を投稿します:

double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal];

double=>string にするには、次を使用します

double cost = [string doubleValue];
于 2013-10-02T17:14:45.210 に答える
1
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3;
NSString *message =[[NSString alloc] initWithFormat:@"%g",cal];

// メッセージを処理する

[メッセージリリース];
于 2010-07-21T12:44:11.997 に答える