C语言初学,求大神指教
printf("Is%2.2ethesameas%2.2f?\n",1201.0,1201.0);的打印结果是Is1.20e+003thesameas1201.00?请问...
printf("Is %2.2e the same as %2.2f?\n",1201.0,1201.0);
的打印结果是
Is 1.20e+003 the same as 1201.00?
请问大神这个1.20e+003怎么理解?不是说浮点型小数点后输出的话一般是6位吗。 还有这个幂怎么+003这样表示? + 一定要显示吗?为什么3前面要加00?求大神指教!!!非常非常感谢。。。 展开
的打印结果是
Is 1.20e+003 the same as 1201.00?
请问大神这个1.20e+003怎么理解?不是说浮点型小数点后输出的话一般是6位吗。 还有这个幂怎么+003这样表示? + 一定要显示吗?为什么3前面要加00?求大神指教!!!非常非常感谢。。。 展开
1个回答
展开全部
“%2.2e”中,前一个 2 表示该数字至少被输出为 2 个字符,科学计数法肯定不止 2 个字符,所以它不起作用,即使没有这个 2 也不影响结果;而后一个 2 表示显示 2 位小数,所以结果有“1.20”,如果把“.2”删去,结果就会有 6 个小数位。后面的符号 + 和三位指数都是编译器决定的,不能更改。
追问
既然后面的符号 + 和三位指数都是编译器决定的,那么它是怎么决定的?各个编译器都不同吗?还有”再格式化输出中,%f和%e默认都是六位,不过%e输出的话那六位包括幂级数,幂级数也占三位(包括小数点)“这个说法正确吗?
追答
对于 %e 格式,C99 标准规定 e(E)之后应有 +/- 号,且指数至少有 2 位。因此,不是所有编译器都使用 3 位指数,但 + 号是相对普遍的(但也不能保证所有编译器都遵循同一标准)。使用 3 位指数的原因可能是:double 类型允许的指数最多也只有 3 位。(真正的原因得问库函数的实现者了,我没有找到相关的资料。)%e 显示的 6 位小数指的就是小数点到 e(E)之间有 6 位,跟后面的指数无关,所以这一说法不正确。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询