是。你是对的。当然这是一个重复的问题。在提出我的问题之前,请继续阅读下面的内容。
我想舍入一个浮点值,即
56.6748939 to 56.7
56.45678 to 56.5
56.234589 to 56.2
实际上它可以是任意数量的小数精度。但我想把它四舍五入到最接近的值。 (如果大于或等于5,则向上舍入,如果不是,则向下舍入)。
我可以使用以下代码执行此操作。
float value = 56.68899
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
[numberFormatter setMaximumFractionDigits:1];
[numberFormatter setRoundingMode:NSNumberFormatterRoundUp];
NSString *roundedString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:value]];
NSNumber *roundedNumber = [NSNumber numberFromString:roundedString];
float roundedValue = [roundedNumber floatValue];
上面的代码看起来像一个漫长的过程。我有几个数字可以完善。 所以这个过程很难将浮点值转换为NSNumber和NSString以及NSNumber和浮动。
还有其他简单方法可以实现我的要求吗?
我对上面的代码仍有疑问。它说roundUp
。所以当谈到roundDown
时,它会起作用吗?
答案 0 :(得分:6)
难道你不能简单地乘以10,数字四舍五入,然后除以10?
答案 1 :(得分:3)
尝试
CGFloat float1 = 56.6748939f;
CGFloat float2 = 56.45678f;
NSLog(@"%.1f %.1f",float1,float2);
56.7 56.5
编辑:
float value = 56.6748939f;
NSString *floatString = [NSString stringWithFormat:@"%.1f",floatValue];
float roundedValue = [floatString floatValue];
答案 2 :(得分:1)
NSString* strr=[NSString stringWithFormat: @"%.1f", 3.666666];
NSLog(@"output is: %@",strr);
输出为:3.7
float fCost = [strr floatValue];
答案 3 :(得分:0)
这对我有用
NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:1];
[formatter setMinimumFractionDigits:0];
CGFloat firstnumber = 56.6748939;
NSString *result1 = [formatter stringFromNumber:[NSNumber numberWithFloat:firstnumber]];
NSLog(@"RESULT #1: %@",result1);
CGFloat secondnumber = 56.45678;
NSString *result2 = [formatter stringFromNumber:[NSNumber numberWithFloat:secondnumber]];
NSLog(@"RESULT #2: %@",result2);
CGFloat thirdnumber = 56.234589;
NSString *result3 = [formatter stringFromNumber:[NSNumber numberWithFloat:thirdnumber]];
NSLog(@"RESULT #2: %@",result3);
答案 4 :(得分:0)
你不想浮动,因为它只能给你六或七位数的精度。你也不想要CGFloat,因为除了iPad Air或iPhone 5s之外,它只能提供六位或七位数的精度。你想要使用双倍。
简化为一位数就完成了:
double x = 56.6748939;
double rounded = round (10 * x) / 10;
答案 5 :(得分:0)
您可以使用
[dictionaryTemp setObject:[NSString stringWithFormat:@"%.1f",averageRatingOfAllOrders] forKey:@"AvgRating"];
%。1f只给小数点后一位数值2.1。
答案 6 :(得分:0)
尝试一下: 这将舍入为不受10的幂限制的任何值。
extension Double {
func roundToNearestValue(value: Double) -> Double {
let remainder = self % value
let shouldRoundUp = remainder >= value/2 ? true : false
let multiple = floor(self / value)
let returnValue = !shouldRoundUp ? value * multiple : value * multiple + value
return returnValue
}
}