c语言中%e的用法

我以为输出的应该是1.2345679e+007但是为什么输出了这么一串数?
2025-06-24 09:11:01
推荐回答(4个)
回答1:

因为a是int类型的,将a的类型改成float就会正常显示了。至于为什么显示这个奇怪的数字,简单讲是因为12345678在内存中的2进制保存形式与这个奇怪的数字的在内存中的2进制保存形式一样,但它们有不同的解释。比如:11111111(2进制),如果作为整数解释,它是2^8-1=255。但如果作为浮点数解释,它是尾数*2^阶码。假设尾数和阶码都是4位,同时为了与真正的浮点数格式的国际标准一致,同时假设此浮点数的2进制存储形式与它要表示的真正的浮点数相比,尾数前面省略了1.,则尾数部分是2^4-1=15,而真正的尾数应该是1.15,同时,阶码是2^4-1=15。所以,按我们的假设,在内存中的11111111(2进制),如果作为浮点数解释,就是:1.15*2^15,它与255完全不同,但内存中的2进制表示与255完全一样。这与你之所以看到那个奇怪的数的原理是一致的,但浮点数的国际标准要比这复杂得多。

回答2:

int a 是整型,用 %e 输出时 要加上 类型强制转换 (double) a:
printf("%.7e", (double) a );
这样就会输出 1.2345678e+007
或者你声明 double a=12345678;

回答3:

应该是
double a;
a=12345678;
printf("%.7f",a);

回答4:

你将 a 的类型改为 float/double