在Objective-C中四舍五入数字


74

我试图对数字进行舍入并转换为字符串,以增强Objective-C程序的输出。

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

例如:

1.4将是以下字符串:1.5

1.2将是以下字符串:1

0.2将是一个字符串:0

我花了一段时间在Google上寻找答案,但是作为Objective-C的菜鸟,我不确定要搜索什么!因此,我非常感谢朝着正确方向的指针!

谢谢,Ash


27
除了增加值的标签(他宣称他的意图,并没有实际询问)他的问题无关,与可可和一切与对象-
贾森可可

Answers:


100

感谢大家的指点,我设法提出了一个解决方案:

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

上面的代码适用于我抛出的测试用例,但是如果有人知道更好的方法,我很想听听它!


7
如果将其输出到文本字段,则只需将格式化程序附加到该字段。
Chuck

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

32
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];

24

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


这似乎有点令人困惑,所以我澄清一下。lroundf()将浮点数舍入为整数,并将其返回为长整数(可以将其转换为字符串stringWithFormat:)。
丹尼尔(Daniel)

11
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];


6

一种简单的方法:

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


2

关注技术在财务应用中为我工作。

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

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

首先要做的是将其用%0.2f进行四舍五入并将其存储在NSString中,然后我将其再次简单地转换为double,结果对我的计算非常有用。


1

我需要能够四舍五入到特定数字(不必四舍五入为整数)。我创建了一个NSNumber类别(基于Ash的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];

1

使用这些函数,您可以四舍五入为任何值。如果使用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;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.