0

是的。你说的对。当然,这是一个重复的问题。在标记我的问题之前,请继续阅读下面的内容。

我想四舍五入一个浮点值,即

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,它会起作用吗?

4

7 回答 7

6

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

于 2013-05-02T07:48:06.940 回答
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];
于 2013-05-02T07:54:34.540 回答
1
    NSString* strr=[NSString stringWithFormat: @"%.1f", 3.666666];
    NSLog(@"output is:  %@",strr);

输出为:3.7

    float fCost = [strr floatValue];
于 2013-05-02T08:00:27.933 回答
0

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

四舍五入非常简单:

double x = 56.6748939;
double rounded = round (10 * x) / 10; 
于 2014-04-16T06:50:10.680 回答
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);
于 2013-05-02T08:01:58.107 回答
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
    }
}
于 2018-07-12T08:39:31.230 回答
0

您可以使用

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

%.1f 将给我们的值 2.1 仅小数点后一位。

于 2017-11-17T10:18:57.210 回答