如果number是int,则ios除去小数位

时间:2012-09-07 07:31:28

标签: ios rounding decimal-point

我有一个应用程序可以导入csv的长数据列表。

我需要处理所提取的数字,但为了做到这一点,我需要摆脱整数的小数位,并留下x.5为十进制的未定位数

例如

1.0 make it 1
1.50 make it 1.5

实现这一目标的最佳方式是什么?

非常感谢!

3 个答案:

答案 0 :(得分:2)

一个简单的NSNumberFormatter应该为你实现这个目的:

float someFloat = 1.5;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setAllowsFloats:YES];
[formatter setMaximumFractionDigits:1];
NSString *string = [formatter stringFromNumber:[NSNumber numberWithFloat:someFloat]];

当然这假设您只有十分之一的小数要保留,例如,如果您使用“1.52”,这将返回“1.5”,但根据您上一篇关于舍入数字的帖子判断为“.5”这个应该不是问题。

答案 1 :(得分:2)

您可以使用modf检查小数部分是否等于零。

-(BOOL)isWholeNumber:(double)number
{
    double integral;
    double fractional = modf(number, &integral);

    return fractional == 0.00 ? YES : NO;
}

也适用于某些边界案例。

float a = 15.001;
float b = 16.0;
float c = -17.999999;

NSLog(@"a %@", [self isWholeNumber:a] ? @"YES" : @"NO");
NSLog(@"b %@", [self isWholeNumber:b] ? @"YES" : @"NO");
NSLog(@"c %@", [self isWholeNumber:c] ? @"YES" : @"NO");

输出

a NO
b YES
c NO

如果数字非常接近整数,则其他解决方案不起作用。我不确定你是否有这个要求。

之后,您可以使用NSNumberFormatter显示它们,一个用于整数,一个用于分数。

答案 2 :(得分:1)

此代码实现了您想要的目标

float value1 = 1.0f;
float value2 = 1.5f;
NSString* formattedValue1 = (int)value1 == (float)value1 ? [NSString stringWithFormat:@"%d", (int)value1] : [NSString stringWithFormat:@"%1.1f", value1];
NSString* formattedValue2 = (int)value2 == (float)value2 ? [NSString stringWithFormat:@"%d", (int)value2] : [NSString stringWithFormat:@"%1.1f", value2];

这种事情可以在一个类别中完成,那么如何

// untested
@imterface NSString (myFormats)
+(NSString)formattedFloatForValue:(float)floatValue;
@end

@implementation NSString (myFormats)
+(NSString)formattedFloatForValue:(float)floatValue
{
    return (int)floatValue == (float)floatValue ? [NSString stringWithFormat:@"%d", (int)floatValue] : [NSString stringWithFormat:@"%1.1f", floatValue];
}
@end

// usage
NSLog(@"%@", [NSString formattedFloatForValue:1.0f]);
NSLog(@"%@", [NSString formattedFloatForValue:1.5f]);