14

簡単な解決策かもしれませんが、修正できません。

私は2つの整数を除算しています:

finishedGameFinalScore = [score integerValue];
CGFloat interval = 2/finishedGameFinalScore;
NSLog(@"interval = %f",interval);

ログは0.000000

小数点以下の桁数に制限はありますか?小数の結果を保存する必要があります。

ありがとうシャニ

4

4 に答える 4

74

コードが機能しない理由は、整数を別の整数で除算し、その結果を浮動小数点数にキャストしているためです。

つまり、2(整数)と他の数(これも整数)があります。次に、2をこの数値で割ります。これはおそらく2より大きいでしょう。3だとしましょう。

Integer2/3を見て、彼は「0.66666667?うーん、とにかく小数点以下は誰も必要ない」のようです。それで彼はそれを切り詰めます。あなたはただ0を持っています。

それからInteger氏に番号を与え、floatfloatは番号を取得してとても幸せです!彼はすべて「イェーイ、0!私はすべての有効数字を追加するつもりです」のようなものです。そして、それはあなたが0.0000000で終わる方法です。

そうそう、最初にフロートにキャストするだけです。またはダブル!

ここに画像の説明を入力してください

于 2012-08-15T12:38:35.580 に答える
13

@ Dustinは、floatに入るときに、整数値を示すように、除算器の値をfloatに型キャストする必要があると述べました。

ケース1:型キャスト

NSString *score = @"3";
 int interval = [str intValue];
 CGFloat interval = (2/(float)interval);
 NSLog(@"interval = %.2f",interval);

ケース2:型キャストの必要はありません

NSString *score = @"3";
 float interval = [str floatValue];
 CGFloat interval = (2/interval);
 NSLog(@"interval = %.2f",interval);
于 2012-08-15T13:03:39.550 に答える
8

数字の2にf-hintを追加するだけです。この場合、これでうまくいきます。

CGFloat interval = 2.0f/finishedGameFinalScore;

上記/下記のすべての答えは正しく、これが機能する理由を完全に説明しています。

于 2012-08-15T15:00:50.957 に答える
1

1.0からlong値を割り出し、float変数に割り当てます。

unsigned long l1 = 65536;
unsigned long l2 = 256;
float f = (l1/1.0)/(l2/1.0);

NSLog(@"%f",f);
于 2015-11-27T07:08:19.373 に答える