你能解释一下为什么行:
printf(" Value%2.2e",1201.0);
给出结果:值1.20e + 03
不仅仅是 12.01e2?
我的思维方式:默认数字是1201.0,说明者告诉我们数字后应该有2个数字。
请解释我有什么问题?
答案 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。