printf()和精度修饰符中的e格式

时间:2015-04-08 16:25:45

标签: c printf format-specifiers

你能解释一下为什么行:

  

printf(" Value%2.2e",1201.0);

给出结果:值1.20e + 03

不仅仅是 12.01e2?

我的思维方式:默认数字是1201.0,说明者告诉我们数字后应该有2个数字。

请解释我有什么问题?

4 个答案:

答案 0 :(得分:4)

根据Wikipedia

  

在标准化科学记数法中,选择指数b使得a的绝对值保持至少为1但小于10(1≤| a | <10)。因此350被写为3.5×10 2 。这种形式可以轻松比较数字,因为指数b给出了数字的数量级。在归一化表示法中,指数b对于绝对值在0和1之间的数字是负的(例如0.5写为5×10 -1 )。当指数为0时,通常会省略10和指数。

     

归一化科学形式是许多领域中大数字表达的典型形式,除非需要非标准化形式,例如工程符号。归一化的科学记数法通常称为指数表示法 - 尽管后一术语更为一般,并且当a不限于1到10的范围(例如工程符号)和10以外的基数时(如3.15×2)也适用 20 )。

答案 1 :(得分:2)

%e格式使用scientifoc表示法,即十进制分隔符前的一位数和缩放的指数。您不能使用此格式在小数分隔符之前设置数字。

答案 2 :(得分:1)

这就是科学记谱法的定义方式。你期望的结果是一个非常奇怪的表示法。我不认为你可以用printf得到它。

格式说明符中点之前的数字定义了生成的子字符串的最小宽度。试试%20.2e看看这意味着什么。

答案 3 :(得分:1)

2中的第一个"%2.2e"是要打印的最小字符宽度。 1.20e+03是8个字符,大于2。

e指示打印的数字为:(符号),1位数,'.',后跟一些数字和指数。

2中的第二个"%2.2e"是要打印小数点后的位数。如果未提供第二个值,则使用6。