NSNumberFormatter舍入到负零

时间:2012-05-31 16:54:42

标签: objective-c cocoa nsnumberformatter

我正在使用NSNumberFormatter将浮点值格式化为整数字符串,即省略小数部分。我觉得很奇怪,范围(-0.5, 0) *开放区间中的数字最终为-0。由于该值将显示给用户,我认为负零不合适。我已经尝试了numberStyleroundingMode的各种组合而没有成功。

有没有办法配置NSNumberFormatter将其输出为0,还是我必须在该范围内采用手动修正?

2 个答案:

答案 0 :(得分:2)

我必须自己纠正这个问题。我使用NSNumberFormatter显示温度,默认为numberStyle - NSNumberFormatterNoStyle,将数字四舍五入为整数,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];
}

答案 1 :(得分:1)

不,没有办法配置它来做到这一点。

在“10.4模式”中,NSNumberFormatter基本上只包装CFNumberFormatter(虽然它不是直接的免费桥接包装)。您可以查看Number Formatter属性键列表,很明显没有什么可以做你想要的。 (可能在“10.0”模式下;需要一些试验和错误才能找到。但我怀疑你是否想要使用它。)

所以预先四舍五入(正如Justin Boo建议的那样)可能是你最好的选择。

当然,您可以进行后期处理。你想要做什么可能取决于你是否也要将-0.00渲染为0.00,你想要对不使用“-0”的本地化发生什么,等等。最简单的情况就是这样简单:< / p>

@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

但如果你想要更复杂的东西,那就会变得更复杂。