2

タイトルにあるように、floatがある場合、小数部分を整数として取得する必要がありますが、どうすればよいですか?

私が考えていた:

  1. 小数点のインデックス(位置)を取得
  2. 小数点以下の桁数がわかります
  3. それらの数字を部分文字列として取得します
  4. 整数に変換します

より良い/よりスマートな方法はありますか?

アップデート:

言及するのを忘れましたが、floatの形式はX.YZのようであるため、小数点以下2桁までです。

4

8 に答える 8

9

modf関数を使用します。

double integral;
double fractional = modf(some_double, &integral);

NSDecimalnumberのこの小数部分を参照してください

于 2012-07-31T06:43:21.390 に答える
5
 float temp=12.123;
NSString *str=[NSString stringWithFormat:@"%f",temp];
NSArray *arr=[str componentsSeparatedByString:@"."];
int tempInt=[[arr lastObject] intValue];
于 2012-07-31T07:04:09.943 に答える
4
NSString *str = [NSString stringWithFormat:@"%f", value];
NSArray *arr = [str componentsSeparatedByString:@"."];
int num = [[arr objectAtIndex:1] intValue];
于 2012-07-31T06:54:01.430 に答える
2

例を見てみましょう:x = 129.567;

xを整数に変換してyに入れます。y = int(x); したがって、y = 129;

ここで、xからyを引きます。したがって、z = xy; z = .567

z = z * 1000; したがって、z = 567

それがあなたが探しているものだと思います。

于 2012-07-31T06:42:01.347 に答える
1

フロートを取り、1000を掛けて、結果を整数に変換するのはどうですか?

于 2012-07-31T06:42:23.883 に答える
0

これが私の解決策です:

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」の使用に関する注意:

于 2012-07-31T09:28:10.313 に答える
0

フロートは、数値を正確に表すことはありません。最良の方法は、「double」番号から文字列を作成してから、文字列操作を実行して小数点以下の桁を取得することです。

于 2012-07-31T06:48:22.243 に答える
0

を見てNSDecimalNumberくださいNSDecimal

于 2012-07-31T06:38:27.927 に答える