代码之家  ›  专栏  ›  技术社区  ›  Ash

目标C中的舍入数

  •  73
  • Ash  · 技术社区  · 17 年前

    我正在尝试做一些数字舍入和转换成字符串,以增强Objective-C程序的输出。

    我有一个浮点值,我想四舍五入到最接近的.5,然后用它来设置标签上的文本。

    例如:

    1.4是一个字符串:1.5

    1.2是一个字符串:1

    0.2将是一个字符串:0

    我花了一段时间在谷歌上寻找答案,但作为一个目标C的笨蛋,我不知道该搜索什么!所以,我真的很感激一个指向正确方向的指针!

    谢谢, 灰分

    11 回复  |  直到 9 年前
        1
  •  98
  •   Ash    17 年前

    感谢各位的指点,我已经想出了一个解决方案:

    float roundedValue = round(2.0f * number) / 2.0f;
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setMaximumFractionDigits:1];
    [formatter setRoundingMode: NSNumberFormatterRoundDown];
    
    NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]];
    [formatter release];
    

    上面的内容适用于我抛出的测试用例,但是如果有人知道更好的方法来做这件事,我会感兴趣的听到它!

        2
  •  37
  •   Durai Amuthan.H    13 年前
    float floatVal = 1.23456;
    

    舍入

    int roundedVal = lroundf(floatVal); 
    
    NSLog(@"%d",roundedVal);
    

    舍入

    int roundedUpVal = ceil(floatVal); 
    
    NSLog(@"%d",roundedUpVal);
    

    舍入

    int roundedDownVal = floor(floatVal);
    
    NSLog(@"%d",roundedDownVal);
    
        3
  •  32
  •   keremk    17 年前
    NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
    
        4
  •  24
  •   Oso    17 年前

    使用lRoundf()将浮点数舍入为整数,然后将整数转换为字符串。

        5
  •  11
  •   Simpu    16 年前
    NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
    
        6
  •  8
  •   hbw    17 年前

    我建议你研究一下 NSNumberFormatter .

        7
  •  5
  •   Lal Krishna    9 年前

    一个简单的方法:

    float theFloat = 1.23456;
    int rounded = roundf(theFloat); NSLog(@"%d",rounded);
    int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp);
    int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown);
    // Note: int can be replaced by float
    
        8
  •  2
  •   Vladimirs Matusevics    13 年前
    NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
    
        9
  •  2
  •   Husrat Mehmood    12 年前

    以下技术在财务应用程序中对我很有用。

     NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated];
    
            monthlyPaymentCalculated=[dd doubleValue];
    
    self.monthlyPaymentCritical=monthlyPaymentCalculated;
    

    首先用%0.2f将它四舍五入并存储在nsstring中,然后我将它再次转换为double,结果对我的计算很好。

        10
  •  1
  •   JJussi    10 年前

    通过这些函数,您可以四舍五入到任何值。如果使用p=2,则得到偶数。

    float RoundTo(float x, float p)
    {
      float y = 1/p;
      return int((x+(1/(y+y)))*y)/y;
    }
    
    float RoundUp(float x, float p)
    {
      float y = 1/p;
      return int((x+(1/y))*y)/y;
    }
    
    float RoundDown(float x, float p)
    {
      float y = 1/p;
      return int(x*y)/y;
    }
    
        11
  •  0
  •   Community Mohan Dere    9 年前

    我需要能够四舍五入到一个特定的数字(不一定是整数)。我做了一个 NSNumber 类别(基于 Ash's answer )并添加了以下方法:

    - (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode
          toPositionRightOfDecimal:(NSUInteger)position
    {
        NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setMaximumFractionDigits:position];
        [formatter setRoundingMode:roundingMode];
        NSString *numberString = [formatter stringFromNumber:self];
        return numberString;
    }
    

    它允许我这样使用它:

    [aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2];
    

    我可以用它通过传入整数 0 作为第二个参数:

    [aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];
    
    推荐文章