0

xib ファイルにテキスト フィールドがあります。.m ファイルのメソッドで、テキスト フィールドの内容を出力できますが、それらの内容を float に変換できません。テキスト フィールドは、123,456,789 のようにコンマでフォーマットされます。以下はコード スニペットで、datacellR2C2 はテキスト フィールドです。

float originalValue2 = originalValue2 = [datacellR2C2.text  floatValue];
NSLog(@"datacellR2C2 as text --> %@ <---\n",datacellR2C2.text);  // this correctly shows the value in datacellR2C2
NSLog(@"originalValue2 = %f  <--\n", originalValue2);  // this incorrectly returns the value 1.0 

問題を探すべき修正または方向性についての提案をいただければ幸いです。

4

1 に答える 1

1

-floatValueコメントの宣言では、次のように表示されます。

/* 次の便利なメソッドはすべて、最初の空白文字 (whitespaceSet) をスキップし、末尾の文字を無視します。NSScanner は、数値のより「正確な」解析に使用できます。*/

したがって、コンマは末尾の文字であるため、切り捨てが発生します。あなたが提供した文字列 (123,456,789) でも 123.000 しか出力されません-floatValue

//test
NSString *string = @"123,456,789";
float originalValue2 = [string  floatValue];
NSLog(@"datacellR2C2 as text --> %@ <---\n",string);  // this correctly shows the value in datacellR2C2
NSLog(@"originalValue2 = %f  <--\n", originalValue2);

//log
2012-07-07 22:16:15.913 [5709:19d03] datacellR2C2 as text --> 123,456,789 <---
2012-07-07 22:16:15.916 [5709:19d03] originalValue2 = 123.000000  <--

単純な でそれらを+stringByReplacingOccurrencesOfString:withString:取り除き、末尾のコンマを削除します。

//test
NSString *string = @"123,456,789";
NSString *cleanString = [string stringByReplacingOccurrencesOfString:@"," withString:@""];
float originalValue2 = [cleanString  floatValue];
NSLog(@"datacellR2C2 as text --> %@ <---\n",cleanString);  // this correctly shows the value in datacellR2C2
NSLog(@"originalValue2 = %f  <--\n", originalValue2);

//log
2012-07-07 22:20:20.737 [5887:19d03] datacellR2C2 as text --> 123456789 <---
2012-07-07 22:20:20.739 [5887:19d03] originalValue2 = 123456792.000000  <--

ちなみに、float はその文字列を偶数に丸めているので、代わりに倍精度を使用してください。

于 2012-07-08T03:20:59.063 に答える