我知道关于SO的这类话题已有很多不同的问题,但我找不到根据我的具体需求量身定做的方法。
我所拥有的是通过网络发送给我的浮点数,我需要将其转换并绘制到屏幕上。这些数字的范围可以是5.2,285.159,294729172.258,-10734.112等。我想要做的是从最高位数下面的一位数得到用于舍入的值。
示例:
5.2 = 5
285.159 = 300
294729172.258 = 300000000
-10734.112 = -11000
非常感谢任何可以用来指导我的建议。
答案 0 :(得分:3)
这是我的解决方案:
int roundMostSignificant(float input)
{
NSNumber *number = [NSNumber numberWithFloat:input];
static NSNumberFormatter *formatter = nil;
if (!formatter)
{
formatter = [NSNumberFormatter new];
[formatter setMinimumSignificantDigits:1];
[formatter setMaximumSignificantDigits:1];
[formatter setUsesSignificantDigits:YES];
}
return [[formatter numberFromString:[formatter stringFromNumber:number]] intValue];
}
是的,这会使用对象,但我认为从长远来看这将是您最好的选择,因为它会为您处理舍入,解析等。
答案 1 :(得分:1)
有一个NSDecimalNumber
和NSDecimalNumberHandler
类可以做到这一点。您可以定义数字的舍入精度和方向。
简单的例子可能是:
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithMatnissa:294729172258 exponent:-3 isNegative:NO];
NSDecimalNumberHandler *dnh = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:-6 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber *rounded = [dn decimalNumberByRoundingAccordingToBehavior:dnh];
这可能适用于你最大的数字。