目标c中的舍入数字为百分之一

时间:2015-03-12 05:50:52

标签: objective-c

我有多个分钟和小时数。我想要做的是将它们加在一起。例如:如果我有数字:31,15和45.那些是分钟。然后我有2小时,3小时和1小时。我想添加所有数字并获得小时和分钟。

我到目前为止将所有分钟加在一起(31 + 15 + 45 = 91),然后我将所有小时数乘以60(2 * 60 = 120; 3 * 60 = 180; 1 * 60 = 60)所以他们转换为分钟。

然后我将最终数字加在一起(91 + 120 + 180 + 60 = 451)。

最后一步是划分451/60 = 7.5166666 ... 7.

我的问题是,由于我到目前为止所做的是正确的,我如何将最终数字调整到百分位数,以便7.51666 ...将变为7.52?

我将在UILabel中显示最终数字(7.52)。

This问题没有回答我的问题,因为这个问题是询问如何将数字四舍五入到最近的.5。我的问题是,如何完善数字。

3 个答案:

答案 0 :(得分:0)

舍入数字的一般方法是将它们乘以所需精度的乘法逆,将结果四舍五入到最接近的整数。然后再将该整数除以乘法逆。

你想要舍入到0.01,它的乘法逆(1 / x)是100。

7.5166666 * 100 = 751.666666
round(751.6666) = 752
752 / 100 = 7,52

或代码:

double x = 7.5166666;
int roundingFactor = (int)(1 / 0.01); // round to 0.01
double rounded = round(x * roundingFactor)/(double)roundingFactor;

或者,如果您只需要显示数字,则应使用NSNumberFormatter.maximumFractionDigits。既然你需要一个NSNumberFormatter(所以你得到一个很好的本地化格式和正确的小数分隔符)你应该使用它。

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
nf.numberStyle = NSNumberFormatterDecimalStyle;
nf.maximumFractionDigits = 2;
nf.roundingMode = NSNumberFormatterRoundHalfUp;
NSString *roundedString = [nf stringFromNumber:@(x)];

答案 1 :(得分:0)

您可以使用NSNumberFormatter对数字进行舍入。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString * numberString = [formatter stringFromNumber:<number>]
NSNumber * formattedNumber = [formatter numberFromString: numberString];

答案 2 :(得分:0)

这是将数字转换为小时和分钟的更好方法。

将所有数字转换为分钟,然后除以60得到整数部分 - 即小时。直到这里你一切顺利。

然后将mod应用于相同的数字并获得剩余的分钟数。

对于前:你有以下时间 - 2小时31分钟,3小时45分钟和1小时15分钟。 所以你的最后一分钟就是

(2*60 + 31) + (3*60 + 45) + (1*60 + 15) = 451

现在

(int)451 / 60 = 7 hrs
451 % 60 = 31 mins

最后时间= 7小时31分钟