我NSNumberFormatter
用来将浮点值格式化为整数字符串,即省略小数部分。我觉得很奇怪,范围(-0.5, 0)
*open 区间中的数字最终为-0
. 由于这个值将显示给用户,我认为负零是不合适的。我已经尝试过各种组合,numberStyle
但都roundingMode
没有成功。
有没有办法将NSNumberFormatter
它们配置为输出0
,或者我是否必须对该范围进行手动校正?
我NSNumberFormatter
用来将浮点值格式化为整数字符串,即省略小数部分。我觉得很奇怪,范围(-0.5, 0)
*open 区间中的数字最终为-0
. 由于这个值将显示给用户,我认为负零是不合适的。我已经尝试过各种组合,numberStyle
但都roundingMode
没有成功。
有没有办法将NSNumberFormatter
它们配置为输出0
,或者我是否必须对该范围进行手动校正?
我必须自己纠正这一点。我使用 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];
}
不,没有办法配置它来做到这一点。
在“10.4 模式”中,NSNumberFormatter 基本上只是包装 CFNumberFormatter(尽管它不是直接的免费桥接包装)。您可以查看 Number Formatter Property Keys 列表,很明显没有什么可以满足您的需求。(在“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
但是如果你想要更复杂的东西,它会变得更复杂。