#include <stdio.h>
int main(int argc, const char * argv[])
{
float apples = 1.1;
float bananas = 2.2;
double fruit = apples + bananas;
printf("%f.\n",fruit);
return 0;
}
好吧....那么为什么这里需要 %f 呢?我知道它正在为我打印“水果”的十进制符号,但为什么我不能只要求程序打印数字“水果”?是因为我必须声明我是否要以十进制 %f 或科学计数法 %e 打印“水果”?我也偶尔遇到过 %d。这意味着什么?
最佳答案
好吧,如果你看一下 definition of the printf function , 然后你会知道这些值传递为 %d : int 格式说明符 %f : 浮点格式说明符
被称为格式说明符
printf也是库中定义的一个简单方法 并根据参数打印值
例如
int a = 5;
float b = 5.43 ;
现在如果你写
printf("%d",a);
它打印存储在变量 a ==>> 中的整数值 5
printf("%f",b);
它打印存储在变量 b ==>> 中的浮点值 5.430000//最多六位数
如果你尝试使用代码
printf("%f",a);
printf("%d",b);
这两行都打印了一个尴尬的值,称为垃圾值,从未知位置获取,因为您使用了错误的格式说明符
可以引用link
1 : http://www.elook.org/programming/c/printf.html获取格式说明符列表
Alok 保存:
看到这有点复杂,如果我不能清楚地解释,请告诉我,我会尝试创建一个具有更好答案的差异问题。
实际发生的是 当你写的时候
int a = 5 // 101 in binary
然后在内存中分配 2 个字节 = 16 位,如
0000000000000101
但是当您尝试通过将 %f 作为格式说明符将其打印为 float 时 它要求一个 4 字节 = 32 位的表达式 但你得到的是 16 位表示 和最重要的一点 float 的第 16 位保留给“.”那是小数 所以你的
0000000000000101 成为
- = 二进制 10//十进制 2
因此小数点前的值变为 2 而不是 5 并且由于 float 仍然有 16 位表示小数点后的值 并且 int 变量仅提供 16 位来表示十进制前的值 因此,表示十进制后值的最后 16 位选择垃圾值 这些垃圾值代表一些随机二进制值 最终产生一些值(value)
所以你的输出将永远是 2.something
这个 something 部分对于每台机器来说都是不同的,因为它会选择垃圾值 但按照给定的解释,小数点前的值将始终相同
希望有用
但如果它不让我知道
我会尝试想出一个更好的表示方式
还有 link会有很大帮助
关于objective-c - 有人可以向我解释 %f 和 %d 的目的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14482409/