タイトルにあるように、floatがある場合、小数部分を整数として取得する必要がありますが、どうすればよいですか?
私が考えていた:
- 小数点のインデックス(位置)を取得
- 小数点以下の桁数がわかります
- それらの数字を部分文字列として取得します
- 整数に変換します
より良い/よりスマートな方法はありますか?
アップデート:
言及するのを忘れましたが、floatの形式はX.YZのようであるため、小数点以下2桁までです。
タイトルにあるように、floatがある場合、小数部分を整数として取得する必要がありますが、どうすればよいですか?
私が考えていた:
より良い/よりスマートな方法はありますか?
アップデート:
言及するのを忘れましたが、floatの形式はX.YZのようであるため、小数点以下2桁までです。
modf関数を使用します。
double integral;
double fractional = modf(some_double, &integral);
NSDecimalnumberのこの小数部分を参照してください
float temp=12.123;
NSString *str=[NSString stringWithFormat:@"%f",temp];
NSArray *arr=[str componentsSeparatedByString:@"."];
int tempInt=[[arr lastObject] intValue];
NSString *str = [NSString stringWithFormat:@"%f", value];
NSArray *arr = [str componentsSeparatedByString:@"."];
int num = [[arr objectAtIndex:1] intValue];
例を見てみましょう:x = 129.567;
xを整数に変換してyに入れます。y = int(x); したがって、y = 129;
ここで、xからyを引きます。したがって、z = xy; z = .567
z = z * 1000; したがって、z = 567
それがあなたが探しているものだと思います。
フロートを取り、1000を掛けて、結果を整数に変換するのはどうですか?
これが私の解決策です:
float value = 12.345f;
float integral;
float divisor = 1000.0f;
float fractional = modff(value, &integral); // breaks a float into fractional and integral parts
int xyz = (int)fmodf(fractional*divisor, divisor); // modulo (cannot just use %)
NSLog(@"XYZ: %d", xyz); // logs "XYZ: 345"
の値を変更することにより、divisor
必要な精度を得ることができます。たとえば、XY(100.0f)またはX(10.0f)のみです。
このソリューションは最もパフォーマンスが高いわけではありませんが、便利です。ビット演算を使用して最適化できると思います。
「f」の使用に関する注意:
フロートは、数値を正確に表すことはありません。最良の方法は、「double」番号から文字列を作成してから、文字列操作を実行して小数点以下の桁を取得することです。
を見てNSDecimalNumber
くださいNSDecimal
。