2013-03-16 102 views
2

在我的代码中,我有一个双号2.555。我通过NSLog使用%.2f来显示它有2.55,但输出是2.56。这是我不想要的数字的四舍五入!我知道有ceil(double)floor(double)被使用,但他们不帮助我在这里。防止双数舍入

double div = a/b; 
NSLog(@"DIV = %.f", div); 
+0

你可以在这里发布你的代码吗? – Aravindhan 2013-03-16 12:43:46

+0

问题是,为什么你不想让数字四舍五入,但只是截断了?对于'2.555',输出'2.55'无效。 – Sulthan 2013-03-16 13:36:33

回答

1

没有看到您的代码是不可能找到错误。下面的代码将根据您的需要工作。

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:2.555]]; 
NSLog(@"%@",numberAsString); 
[numberFormatter release]; 

,你可以参考,这个链接NSNumberFormatter

+0

哦谢谢它确实工作。难道不能以更简单的方式完成吗?或者我应该始终记住NSNumberFormatter? – HusseinB 2013-03-16 12:54:25

+0

问题在于打印格式说明符如何在C中工作。这是一个合理的Objective-C解决方案。 – uchuugaka 2013-03-16 12:56:43

+0

它不能以更简单的方式完成然后这(据我所知)。你必须为此使用NSNumberFormatter。 – Aravindhan 2013-03-16 12:59:00

0

我觉得还有一个更简单的方法来做到这一点。 如果我正确理解你,你不想使用floor(),因为你想保持“div”的内容不变。如果这是正确的,那么你可以做到以下几点。 NSLog(@“DIV =%.2f”,trunc(div * 100)/ 100);
NSLog(@“DIV =%.2f”,floor(div * 100)/ 100);

以上将在第二秒后删除小数点,但仅用于显示。 “div”的内容不变。

+0

这不起作用。浮点数字不太容易工作。 – Sulthan 2013-03-16 13:36:05

+0

大部分时间都适用,特别是当数学不会将您的号码超过尾数限制时。不过我同意,在裂缝开始显示之前,你只能推浮点数。 – hvanbrug 2013-03-16 14:15:06