文字列を double に変換し、いくつかの計算を行った後、文字列に変換したいと考えています。
Objective-Cでこれを行うにはどうすればよいですか?
double を最も近い整数に丸める方法はありますか?
文字列を double に変換し、いくつかの計算を行った後、文字列に変換したいと考えています。
Objective-Cでこれを行うにはどうすればよいですか?
double を最も近い整数に丸める方法はありますか?
NSString を double に変換できます
double myDouble = [myString doubleValue];
最も近い int への丸めは、次のように行うことができます。
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
正直なところ、文字列に戻すより合理的な方法があるかどうかはわかりません
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
実際に文字列から数値に適切に変換するには、文字列をNSNumberFormatter
読み取るロケール用に構成された のインスタンスを使用する必要があります。
ロケールが異なれば、数値の形式も異なります。たとえば、世界の一部の地域ではCOMMA
が小数点記号として使用されていますが、別の地域では使用されてPERIOD
おり、千単位の区切り記号 (使用されている場合) は逆になっています。スペースの場合を除きます。またはまったく存在しない。
それは本当に入力の出所に依存します。最も安全なNSNumberFormatter
方法は、入力のフォーマット方法に を設定し、それを使用-[NSFormatter numberFromString:]
して を取得するNSNumber
ことです。変換エラーを処理したい場合は、-[NSFormatter getObjectValue:forString:range:error:]
代わりに使用できます。
olliejの答えに加えて、intからNSNumber
's stringValue
:を使用して文字列に変換することができます。
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
NSNumber
呼び出しで、descriptionWithLocale:nil
値のローカライズされた文字列表現を提供します。[NSString stringWithFormat:@"%d",myInt]
適切にローカライズされたの表現が得られるかどうかはわかりませんmyInt
。
ローカライズされた数値文字列 (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
olliej の丸め方法は負の数に対して間違っています
ここに代替案があります
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
もちろん、math.h の丸め関数を使用することもできます。
数値から文字列への変換については、新しいリテラル構文 (XCode >= 4.4) を使用してみてください。もう少しコンパクトです。
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
( NSNumberとしてボックス化し、 NSObjects の説明メソッドを使用して文字列に変換します)
// 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];
丸めには、おそらくmath.hで定義されているC関数を使用する必要があります。
int roundedX = round(x);
Optionキーを押しround
ながらXcodeをダブルクリックすると、さまざまなタイプを丸めるためのさまざまな機能を備えたマニュアルページが表示されます。
テキストフィールドに入力されたテキストを整数に変換します
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];
私はこの便利なマクロを使用することになりました:
#define STRING(value) [@(value) stringValue]
これは私が知っている最も簡単な方法です:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
この例から、両方の方法で変換を確認できます。
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);