将小数点限制为所需的值

时间:2012-04-19 03:48:54

标签: objective-c double

  

可能重复:
  Rounding numbers in Objective-C
  objective -C : how to truncate extra zero in float?
  Correcting floating point numbers

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

double answer = a / b;

double变量有时可以是整数,但也可以是一个分数,例如

NSLog(@"%f", answer)

这可以返回2.000000或5.142394或2.142000。

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

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

如何做到这一点?

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分:2)

NSNumberFormatter正是您所寻找的。 (如果你不使用Mac,我很抱歉,我稍后会发布类似iOS文档的链接。)

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