4

可能重复:
Objective-C 中的舍入数字 Objective-C
:如何截断浮点中的额外零?
修正浮点数

在Objective C中,我有一个double,它接收计算的答案,如下所示:

double answer = a / b;

双精度变量有时可以是整数,但也可以是分数,例如

NSLog(@"%f", answer)

这可以返回 2.000000 或 5.142394 或 2.142000。

我想知道是否有办法编辑小数位,使尾随的 0 不可见,例如:

2.000000 将是 2
5.142394 将是 5.142394
2.142000 将是 2.142

如何才能做到这一点?

4

2 回答 2

10

如果您想硬编码您所追求的小数位数,这将为您提供两位小数:

NSLog(@"%.2f", answer);

在此处阅读有关格式说明符的更多信息:

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

或者,如果您想即时更改小数位数,请考虑使用NSNumberFormatter类:

int maxDigitsAfterDecimal = 3; // here's where you set the dp

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init];
[nf setMaximumFractionDigits:maxDigitsAfterDecimal];

NSString * trimmed = [nf stringFromNumber:[NSNumber numberWithDouble:3.14159]];
NSLog(@"%@", trimmed); // in this case, 3.142

[nf release];
于 2012-04-19T03:50:35.570 回答
2

NSNumberFormatter正是您正在寻找的。(如果您不使用 Mac,我深表歉意,稍后我将发布指向类似 iOS 文档的链接)。

编辑(根据要求):NSNumberFormatter 实际上适用于 iOS(我上面发布的文档与 iOS 相同),并且有一些您应该设置的相关属性。一方面,它的 numberStyle 属性应该设置为 NSNumberFormatterDecimalStyle(其他包括百分比、银行家和拼写)。NSNumberFormatter 还包括一个 roundingMode 属性,在您的情况下应该是 NSNumberFormatterRoundHalfEven。这将更改您的小数以使最后一位四舍五入,但这是摆脱这些零的最佳方法。

于 2012-04-19T03:58:47.183 回答