首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可读NSNumber的NSTimeInterval

可读NSNumber的NSTimeInterval
EN

Stack Overflow用户
提问于 2009-02-22 23:48:49
回答 7查看 9.1K关注 0票数 3

NSTimeInterval == double;(例如169.12345666663)

如何四舍五入这个双精度数,使“点”后只剩下两位数?

如果结果是NSNumber,那就太好了。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-22 23:56:24

如果这是为了显示目的,请查看NSNumberFormatter

如果由于某些原因,您确实想在计算中舍入双精度数,则可以使用标准的C round()函数。

票数 6
EN

Stack Overflow用户

发布于 2011-03-25 00:26:29

使用NSDecimalRound()可以将NSDecimal四舍五入为指定的位数。

代码语言:javascript
复制
double d = [[NSDate date] timeIntervalSince1970];
NSDecimal in = [[NSNumber numberWithDouble:d] decimalValue];
NSDecimal out;
NSDecimalRound( &out, &in, 2, NSRoundUp );

NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:out];
票数 2
EN

Stack Overflow用户

发布于 2011-03-29 20:20:15

如果你真的想要点后剩下的两位数,乘以100,使用round()函数对其进行舍入,再将其除以100。然而,这并不能保证它在点之后只有两位数,因为通过再次除以它,你可能得到一个不能真正用浮点符号表示的数字,而当你期望0.1时,你实际上可能得到0.09999...,这是因为你不能真正使用浮点符号来表达0.1。

如果您只想将其四舍五入为点后的两位数,则可以按照建议使用NSNumberFormatter或直接使用:

代码语言:javascript
复制
printf("%.2f\n", yourTimeInterval);
NSLog(@"%.2f\n", yourTimeInterval);

或者,要获取NSString,您还可以使用以下命令,这可能比使用NumberFormatter更快(但是,它不会根据用户偏好进行本地化):

代码语言:javascript
复制
NSString * intervalStr = nil;
char * intervalStrTmp = NULL;
asprintf(&intervalStrTmp, "%.2f", yourTimeInteval);
if (intervalStrTmp) {
  intervalStr = [[NSString alloc] initWithUTF8String:intervalStrTmp];
  free(intervalStrTmp);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/576110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档