是否有任何简单的方法可以在目标c中使用一位数字舍入浮点数?

是。 你是对的。 当然这是一个重复的问题。 在提出我的问题之前,请继续阅读以下内容。

我想舍入一个浮点值,即

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和float。

有没有其他简单的方法来实现我的要求?

我仍然对上面的代码有疑问。 它说roundUp 。 所以当谈到roundDown ,它会起作用吗?

难道你不能简单地乘以10,数字四舍五入,然后除以10吗?

尝试

 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]; 
  NSString* strr=[NSString stringWithFormat: @"%.1f", 3.666666]; NSLog(@"output is: %@",strr); 

输出为:3.7

  float fCost = [strr floatValue]; 

这对我有用

 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); 

你不想浮动,因为它只给你六或七位精度。 你也不想要CGFloat,因为除了iPad Air或iPhone 5s之外,它只能提供六位或七位数的精度。 你想要使用双倍。

舍入到一位数非常简单:

 double x = 56.6748939; double rounded = round (10 * x) / 10; 

您可以使用

 [dictionaryTemp setObject:[NSString stringWithFormat:@"%.1f",averageRatingOfAllOrders] forKey:@"AvgRating"]; 

%.1f只给小数点后的一位数。

试试这个:这将舍入到不受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 } }