2011-11-29 63 views
2

我想在一个简单的计算器程序打印花车点的iOS:在Objective C:打印浮点数,因为它是

如果计算结果为5.555123125,然后打印准确5.555123125。 如果结果是1.2,那么1.2。 如果2.555,则2.555。不是2.56或不是2.555000。

没有零填料,没有扔掉,没有舍入或关闭。就这样。

尝试使用%f格式化,但我必须指定数字的位数:如%10.4f。 尝试了%g,但它根据位数进行了自动更改。

就这样,这很难吗?

回答

2
NSNumber * test = [NSNumber numberWithDouble:5.555123125]; 
NSLog(@"number = %@", test); 

似乎工作。

+0

不错。解决了。但numberWithFloat不起作用。可能它与内部结构有关...... – user1071023

+0

当然,float是一个二进制格式,占用32位(4字节),其有效位数的精度为24位(约7位十进制数字)。 (http://en.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers)因此,5.555123125可能会被截断为5.555123,例如 – Zoleas

+0

也请注意检查答案是否正确,如果是;) – Zoleas

-2

您应该尝试使用%lf而不是%f作为双打。

+1

'%lf '在'printf'(或'NSLog')中使用时与'%f'相同:“长度修饰符及其含义是:'l' ...对后面的'a','A'没有影响,'e','E','f','F','g'或'G'转换说明符“。 (C99,§7.19.6.1) –

0

单精度浮点数(float)数字有32位,其中8位用于指数。这留下了24个有效位,它给你日志(2 )≈7个重要的十进制数字。如果您需要更多有效数字,请上移至双精度浮点数(double),这将为您提供64位,指数为11,尾数为53。 A double因此提供了日志(2 )≈15个重要的十进制数字。

请注意,任何提供IEEE单精度和双精度浮点类型的语言都是如此,而不仅仅是Objective-C。此外,printf风格的格式说明了double%d,所以这应该在Objective-C正常工作,而不需要的NSNumber:

NSLog(@"result = %d", 5.555123125); 

了解更多关于浮点运算: