我想知道以百分比格式制作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
这是正确的做法吗?
答案 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:值不再是整数,而是一个字符串。
希望它有所帮助!