8

NSNumberFormatter浮動小数点値を整数文字列としてフォーマットするために使用しています。つまり、小数部分を省略しています。奇妙なことに、(-0.5, 0) *openintervalの範囲の数値は最終的に。になり-0ます。この値はユーザーに表示されるので、負のゼロは適切ではないと思います。私はさまざまな組み合わせを試しましたが、成功numberStyleroundingModeませんでした。

NSNumberFormatterそれらをとして出力するように構成する方法はあります0か、またはその範囲を手動で修正する必要がありますか?

4

2 に答える 2

2

私はこれを自分で修正しなければなりませんでした。NSNumberFormatterを使用して、デフォルトで温度を表示していますnumberStyleNSNumberFormatterNoStyleこれは、数値を整数に丸め、にroundingMode設定しNSNumberFormatterRoundHalfUpます。結局、問題のある範囲の値をインターセプトし、自分で丸めました。

- (NSString *)temperature:(NSNumber *)temperature
{
    float f = [temperature floatValue];
    if (f < 0 && f > -0.5)
        temperature = [NSNumber numberWithLong:lround(f)];

    return [self.temperatureFormatter stringFromNumber:temperature];
}
于 2012-07-18T09:25:32.823 に答える
1

いいえ、それを行うように構成する方法はありません。

「10.4モード」では、NSNumberFormatterは基本的にCFNumberFormatterをラップするだけです(ただし、直接の無料ブリッジラッピングではありません)。Number Formatterプロパティキーのリストを見ると、あなたが望むことをするものが何もないことはかなり明らかです。(「10.0」モードでは可能かもしれません。見つけるには少し試行錯誤が必要です。しかし、それを使いたいとは思えません。)

したがって、(Justin Booが示唆するように)事前丸めがおそらく最良のオプションです。

もちろん、代わりに後処理することもできます。正確に何をしたいかは、おそらく-0.00を0.00としてレンダリングするかどうか、「-0」を使用しないローカリゼーションで何を実行するかなどによって異なります。最も単純なケースは次のようになります。

@interface NSNumberFormatter (NegativeZero)
- (NSString *)stringFromNumberNoNegativeZero:(NSNumber *)number;
@end

@implementation NSNumberFormatter (NegativeZero)
- (NSString *)stringFromNumberNoNegativeZero:(NSNumber *)number {
  NSString *s = [self stringFromNumber:number];
  if ([s isEqualToString:@"-0"]) return @"0";
  return s;
}
@end

しかし、もっと複雑なものが必要な場合は、さらに複雑になります。

于 2012-05-31T19:55:27.967 に答える