NSTimeInterval == double;(例如169.12345666663)
如何四舍五入这个双精度数,使“点”后只剩下两位数?
如果结果是NSNumber,那就太好了。
发布于 2009-02-22 23:56:24
如果这是为了显示目的,请查看NSNumberFormatter。
如果由于某些原因,您确实想在计算中舍入双精度数,则可以使用标准的C round()函数。
发布于 2011-03-25 00:26:29
使用NSDecimalRound()可以将NSDecimal四舍五入为指定的位数。
double d = [[NSDate date] timeIntervalSince1970];
NSDecimal in = [[NSNumber numberWithDouble:d] decimalValue];
NSDecimal out;
NSDecimalRound( &out, &in, 2, NSRoundUp );
NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:out];发布于 2011-03-29 20:20:15
如果你真的想要点后剩下的两位数,乘以100,使用round()函数对其进行舍入,再将其除以100。然而,这并不能保证它在点之后只有两位数,因为通过再次除以它,你可能得到一个不能真正用浮点符号表示的数字,而当你期望0.1时,你实际上可能得到0.09999...,这是因为你不能真正使用浮点符号来表达0.1。
如果您只想将其四舍五入为点后的两位数,则可以按照建议使用NSNumberFormatter或直接使用:
printf("%.2f\n", yourTimeInterval);
NSLog(@"%.2f\n", yourTimeInterval);或者,要获取NSString,您还可以使用以下命令,这可能比使用NumberFormatter更快(但是,它不会根据用户偏好进行本地化):
NSString * intervalStr = nil;
char * intervalStrTmp = NULL;
asprintf(&intervalStrTmp, "%.2f", yourTimeInteval);
if (intervalStrTmp) {
intervalStr = [[NSString alloc] initWithUTF8String:intervalStrTmp];
free(intervalStrTmp);
}https://stackoverflow.com/questions/576110
复制相似问题