سؤال

أحاول القيام ببعض تقريب الأرقام وتحويله إلى سلسلة لتعزيز الإخراج في برنامج موضوعي C.

لدي قيمة تعويم أرغب في جولة إلى أقرب .5 ثم استخدمها لتعيين النص على تسمية.

علي سبيل المثال:

1.4 ستكون سلسلة من: 1.5

1.2 ستكون سلسلة من: 1

0.2 سيكون سلسلة من: 0

لقد أمضيت بعض الوقت في النظر إلى Google للحصول على إجابة ولكن كونها مستجد مع الهدف - ج، لست متأكدا مما يجب البحث عنه! لذلك، كنت أقدر حقا مؤشر في الاتجاه الصحيح!

شكرا، الرماد

هل كانت مفيدة؟

المحلول

شكرا على المؤشرات الجميع، لقد تمكنت من التوصل إلى حل:

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

الأعمال المذكورة أعلاه لحالات الاختبار التي ألقيت بها، ولكن إذا كان أي شخص يعرف طريقة أفضل للقيام بذلك سأكون مهتما بسمعها!

نصائح أخرى

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);
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];

استخدم Lroundf () لتقريب تعويم إلى عدد صحيح ثم تحويل عدد صحيح إلى سلسلة.

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

أود أن أوصي بالنظر إلى استخدام nsnumberformter..

طريقة بسيطة:

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
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];

العمل التالية عملت بالنسبة لي في تطبيق مالي.

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

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

ما هو تم تقريبه أولا مع٪ 0.2F وتخزينه في Nsstring ثم قمت ببساطة بتحويله مرة أخرى إلى مضاعفة وكان النتيجة جيدة لحسابي.

كنت بحاجة إلى أن أكون قادرا على الجولة إلى رقم معين (وليس بالضرورة للأعداد الصحيحة بالكامل). انا صنعت NSNumber الفئة (استنادا إجابة الرماد) وأضفت الطريقة التالية:

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

مع هذه الوظائف، يمكنك جولة إلى أي قيمة .. إذا كنت تستخدم 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top