2

浮動小数点数をフォーマットしていて、現在%0.2fフォーマッターを使用していますが、浮動小数点数が偶数の場合は.00を省略したいと思います。

もちろん、.00の代わりに文字列を使用することも考えられますが、それは大雑把です。

NSNumberの説明も同様のことをしていることがわかりました。

NSNumber *number = [NSNumber numberWithFloat:_paragraphSpacing];
[retString appendFormat:@"margin-bottom:%@px;", number];

これは、ポストコンマの数字を制限するものではありません。番号が1234.56789の場合、説明はそれを出力します。

だから私の質問は、この結果を達成するために、おそらくNSNumberオブジェクトを作成する必要なしに、同じように簡単な方法がありますか?

4

4 に答える 4

1

フォーマッタを使用します。

NSNumberFormatter* formatter= [NSNumberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle;
formatter.maximumFractionDigits=2;
NSNumber *number = [NSNumber numberWithFloat:_paragraphSpacing];
[retString appendFormat:@"margin-bottom:%@;", [formatter stringFromNumber: number]];
于 2012-12-23T19:38:51.757 に答える
1

NSNumberFormatterこれには次のものを使用できます。

static NSNumberFormatter *numberFormatter = nil;
if (numberFormatter == nil) {
    numberFormatter = [[NSNumberFormatter alloc] init];
    numberFormatter.minimumFractionDigits = 0;
    numberFormatter.maximumFractionDigits = 2;
    numberFormatter.usesGroupingSeparator = NO;
}
NSString *formattedNumberString = [numberFormatter
     stringForNumber:[NSNumber numberWithDouble: _paragraphSpacing]];
于 2012-12-23T19:39:08.480 に答える
1

C 関数modffを使用して小数部分を取得し、テストできます。

float fractionPart = 0.;
modff(_paragraphSpacing, &fractionPart);
if( fabsf(fractionPart) < 0.01 ) {
  // format as integer
  [retString appendFormat:@"margin-bottom:%d", (int)_paragraphSpacing];
} else {
  // format as float
  [retString appendFormat:@"margin-bottom:%0.2f", _paragraphSpacing];
}
于 2012-12-23T19:27:27.300 に答える
1

浮動小数点数は正確ではないため、数値が実際に整数になるという保証はありません。ただし、整数値からかなり近い距離にあるかどうかを確認することはできます。もちろん、これには NSNumber は必要ありません。(一般に、NSNumber は書式設定には使用されません。その目的は、Objective-C オブジェクトを使用して、整数型または浮動小数点型のプリミティブ C 型を表すことです。)

#include <math.h>

- (NSString *)stringFromFloat:(float)f
{
    const float eps = 1.0e-6;
    if (abs(round(f) - f) < eps) {
        // assume an integer
        return [NSString stringWithFormat:@"margin-bottom: %.0fpx", round(f)];
    } else {
        // assume a real number
        return [NSString stringWithFormat:@"margin-bottom: %.2fpx", f];
    }
}
于 2012-12-23T19:20:20.973 に答える