Objective C中百分比格式的动态值

时间:2017-02-14 05:47:19

标签: ios objective-c

我想知道以百分比格式制作Objective C变量值。我动态得到6个值。有时值可能会增加超过100.例如:Avalue = 143,Bvalue = 450,Cvalue = 76,Dvalue = 98,Evalue = 123,Fvalue = 56 如何在百分比格式下格式化每个值?

(Avalue * 100)/100.f
(Bvalue * 100)/100.f
(Cvalue * 100)/100.f
(Dvalue * 100)/100.f
(Evalue * 100)/100.f
(Fvalue * 100)/100.f

这是正确的做法吗?

1 个答案:

答案 0 :(得分:3)

嗯,百分比数字本质上是分数。在数学中,percentage是一个数字或比率,表示为100的分数。

如果你想比较你的情况下的数字,将每个数字与总和所有值进行比较,然后将总和设置为100%。

float sumAllValues =  (Avalue + Bvalue + ...);
float aValuePercent = (Avalue / sumAllValues) * 100.f

您可以使用NSNumberFormatter格式化该百分比数字

NSString *result1 = [NSNumberFormatter localizedStringFromNumber:[NSNumber numberWithFloat:aValuePercent];
                                                    numberStyle:NSNumberFormatterPercentStyle];

btw:为什么变量以大写字母开头?

- 编辑 -

分割整数时,请记住整数除以整数会产生整数。 我为控制台写了一个简短的例子。

 NSInteger a = 5;
 NSInteger b = 6;
 NSInteger c = a * 100 / b;
 NSInteger d = a / b * 100;
// example with conversion al values to float 
float e = [[NSNumber numberWithInteger:a] floatValue] / [[NSNumber numberWithInteger:b] floatValue] * 100;
NSLog(@"resulting int c: %lu", c);
NSLog(@"resulting int d: %lu", d);
NSLog(@"resulting float e: %f", e);


2017-02-14 19:36:54.897 IntegerTest[2291:1238166] resulting int c: 83
2017-02-14 19:36:54.898 IntegerTest[2291:1238166] resulting int d: 0
2017-02-14 19:36:54.898 IntegerTest[2291:1238166] resulting float e: 83.333328
Program ended with exit code: 0

你会看到,当你将第一个整数与100和除数相乘时,得到83。

反过来(在数学上是正确的),首先是除法,在乘法之后,得到0,因为5/6小于1而整数值设置为0.因为将0乘以任何其他值保持为0,结果为0.

  • 再次编辑 - 来自控制台的代码是用普通整数编写的,但实质上它们与您的值相同。首先是乘法,然后是除法。 NSInteger aPercentage = (Avalue * 100) / Bvalue;

或将所有值转换为浮点数。像这样:

float aValueFloat = [[NSNumber numberWithInt:Avalue] floatValue];
  • 再次编辑 - 这仅仅是出于某种原因。价值只是除数,因为我不知道,要洗涤你想要比较这些价值的价值。在这个例子中,Avalue与Bvalue进行比较,比如Avalue是Bvalue的百分比。 如果您只想打印143%的Avlue = 143,那么:

    NSInteger aValue = 146;
    NSString *aValuePercentString = [NSString stringWithFormat:@"%ld%%", aValue];
    NSLog(@"%@", aValuePercentString);
    

输出:2017-02-15 16:52:26.346测试[2132:1070601] 146%

注1:这适用于整数值。如果值为NSNumber,则使用%@而不是%ld。

注2:值不再是整数,而是一个字符串。

希望它有所帮助!