147

文字列を double に変換し、いくつかの計算を行った後、文字列に変換したいと考えています。

Objective-Cでこれを行うにはどうすればよいですか?

double を最も近い整数に丸める方法はありますか?

4

12 に答える 12

234

NSString を double に変換できます

double myDouble = [myString doubleValue];

最も近い int への丸めは、次のように行うことができます。

int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

正直なところ、文字列に戻すより合理的な方法があるかどうかはわかりません

NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
于 2008-10-04T07:45:08.980 に答える
71

実際に文字列から数値に適切に変換するには、文字列をNSNumberFormatter読み取るロケール用に構成された のインスタンスを使用する必要があります。

ロケールが異なれば、数値の形式も異なります。たとえば、世界の一部の地域ではCOMMAが小数点記号として使用されていますが、別の地域では使用されてPERIODおり、千単位の区切り記号 (使用されている場合) は逆になっています。スペースの場合を除きます。またはまったく存在しない。

それは本当に入力の出所に依存します。最も安全なNSNumberFormatter方法は、入力のフォーマット方法に を設定し、それを使用-[NSFormatter numberFromString:]して を取得するNSNumberことです。変換エラーを処理したい場合は、-[NSFormatter getObjectValue:forString:range:error:]代わりに使用できます。

于 2008-10-04T19:10:32.250 に答える
33

olliejの答えに加えて、intからNSNumber's stringValue:を使用して文字列に変換することができます。

[[NSNumber numberWithInt:myInt] stringValue]

stringValueNSNumber呼び出しで、descriptionWithLocale:nil値のローカライズされた文字列表現を提供します。[NSString stringWithFormat:@"%d",myInt]適切にローカライズされたの表現が得られるかどうかはわかりませんmyInt

于 2008-10-04T17:37:55.743 に答える
8

ローカライズされた数値文字列 (xCode 3.2.4、osX 10.6) を読み取る NSNumberFormatter の実際のサンプルを次に示します。注意: "8,765.4 " などの末尾の空白は処理できますが、これは先頭の空白を処理できず、迷子のテキスト文字も処理できません。(不正な入力文字列: " 8" と "8q" と "8 q"。)

NSString *tempStr = @"8,765.4";  
     // localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
     // next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial

NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", 
    tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release];  // good citizen
于 2010-10-25T21:03:02.133 に答える
7

olliej の丸め方法は負の数に対して間違っています

  • 2.4 の丸めは 2 です (olliej のメソッドはこれを正しく処理します)
  • −2.4 丸めは −2 です (olliej のメソッドは -1 を返します)

ここに代替案があります

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

もちろん、math.h の丸め関数を使用することもできます。

于 2008-10-04T07:57:15.383 に答える
3

数値から文字列への変換については、新しいリテラル構文 (XCode >= 4.4) を使用してみてください。もう少しコンパクトです。

int myInt = (int)round( [@"1.6" floatValue] );

NSString* myString = [@(myInt) description];

( NSNumberとしてボックス化し、 NSObjects の説明メソッドを使用して文字列に変換します)

于 2012-12-04T13:07:41.877 に答える
3
// Converting String in to Double

double doubleValue = [yourString doubleValue];

// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal

// Converting double to int

int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];
于 2012-08-01T10:37:27.830 に答える
2

丸めには、おそらくmath.hで定義されているC関数を使用する必要があります。

int roundedX = round(x);

Optionキーを押しroundながらXcodeをダブルクリックすると、さまざまなタイプを丸めるためのさまざまな機能を備えたマニュアルページが表示されます。

于 2008-10-06T21:30:02.280 に答える
1

テキストフィールドに入力されたテキストを整数に変換します

double mydouble=[_myTextfield.text doubleValue];

最も近いdoubleへの丸め

mydouble=(round(mydouble));

最も近いintへの丸め(正の値のみを考慮)

int myint=(int)(mydouble);

doubleからstringへの変換

myLabel.text=[NSString stringWithFormat:@"%f",mydouble];

また

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

intからstringへの変換

myLabel.text=[NSString stringWithFormat:@"%d",myint];

また

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
于 2013-02-24T12:42:56.770 に答える
1

私はこの便利なマクロを使用することになりました:

#define STRING(value)               [@(value) stringValue]
于 2013-01-23T15:16:14.397 に答える
1

これは私が知っている最も簡単な方法です:

float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
于 2009-06-06T19:38:01.803 に答える
1

この例から、両方の方法で変換を確認できます。

NSString *str=@"5678901234567890";

long long verylong;
NSRange range;
range.length = 15;
range.location = 0;

[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];

NSLog(@"long long value %lld",verylong);
于 2010-12-14T19:14:21.077 に答える