我想在一个简单的计算器程序打印花车点的iOS:在Objective C:打印浮点数,因为它是
如果计算结果为5.555123125,然后打印准确5.555123125。 如果结果是1.2,那么1.2。 如果2.555,则2.555。不是2.56或不是2.555000。
没有零填料,没有扔掉,没有舍入或关闭。就这样。
尝试使用%f格式化,但我必须指定数字的位数:如%10.4f。 尝试了%g,但它根据位数进行了自动更改。
就这样,这很难吗?
我想在一个简单的计算器程序打印花车点的iOS:在Objective C:打印浮点数,因为它是
如果计算结果为5.555123125,然后打印准确5.555123125。 如果结果是1.2,那么1.2。 如果2.555,则2.555。不是2.56或不是2.555000。
没有零填料,没有扔掉,没有舍入或关闭。就这样。
尝试使用%f格式化,但我必须指定数字的位数:如%10.4f。 尝试了%g,但它根据位数进行了自动更改。
就这样,这很难吗?
NSNumber * test = [NSNumber numberWithDouble:5.555123125];
NSLog(@"number = %@", test);
似乎工作。
您应该尝试使用%lf
而不是%f
作为双打。
'%lf '在'printf'(或'NSLog')中使用时与'%f'相同:“长度修饰符及其含义是:'l' ...对后面的'a','A'没有影响,'e','E','f','F','g'或'G'转换说明符“。 (C99,§7.19.6.1) –
单精度浮点数(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);
了解更多关于浮点运算:
不错。解决了。但numberWithFloat不起作用。可能它与内部结构有关...... – user1071023
当然,float是一个二进制格式,占用32位(4字节),其有效位数的精度为24位(约7位十进制数字)。 (http://en.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers)因此,5.555123125可能会被截断为5.555123,例如 – Zoleas
也请注意检查答案是否正确,如果是;) – Zoleas