2

フィルタの値を計算しているアプリがあります。これらの値は通常、10^-9の値の範囲内です。現時点では、この計算の値はフロートに送信されます。この番号を標準形式で強制的に表示する簡単な方法はありますか?つまり、小数点以下が長いのとは対照的に、x * 10^-9です。よろしく

4

3 に答える 3

3

あなたはNSNumberFormatterクラスが欲しいです。具体的には、numberStyleプロパティをに設定しますkCFNumberFormatterScientificStyle。何かのようなもの:

NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
numFormatter.numberStyle = kCFNumberFormatterScientificStyle;
NSString *result = [numFormatter stringFromNumber:[NSNumber numberWithFloat:someFloat]];
于 2012-11-29T12:42:34.420 に答える
2

標準形式の文字列を準備するための修飾子があります:%gおよび%G

これは標準形式を強制しませんが、非常に大きい数と非常に小さい数は、末尾のゼロなしで標準形式になります。私が大胆にしたビットを見てください。

  • %g

「double」引数は、科学形式または標準形式で出力されます。科学的記数法は、変換の結果の指数が-4未満、または精度よりも大きい場合にのみ使用されます。それ以外の場合は、標準表現が使用されます。科学的記数法では、指数を示す「e」は小文字です。精度は、必要な有効桁数(必ずしも小数点以下の桁数ではありません)を意味するものと見なされます。末尾のゼロは結果から削除され、小数点は数字が後に続く場合にのみ表示されます。

  • %G

科学的記数法で指数を示す「E」が大文字であることを除いて、「%g」形式と同じです。

ソース

于 2012-11-29T13:03:51.340 に答える
0
float yourfloat = [insert here];

float display = yourfloat;

bool neg = false;

if (display < 0)
{
    neg = true;
    display *= -1;
}

int e = 0;

while (display < 1 && display > 0)
{
    display *= 10;
    e++;
}

if (e > 0)
    NSLog(@"%f*10^-%d", display * (neg ? -1 : 1), e);
else
    NSLog(@"%f", display * (neg ? -1 : 1));

もちろん、NSLogを文字列に置き換えるか、出力が必要です。

于 2012-11-29T12:39:04.480 に答える