为什么使用“%.4g”转换的“(double)123456”的科学记数法是“1.235e+05”而不是 1.234e+05
Why sciencific notation for "(double)123456" with "%.4g" conversion is "1.235e+05" instead of 1.234e+05
对我来说,使用此转换时 1.234e+05 似乎很正常,因为当我们使用“%f\n”、1.235e+05 还原它时,我们得到 123500.000000 而不是希望的“ 123400.000000".
其实问题是:为什么跳过了“4”位?!
下面的例子会强化我想说的话:
#include <stdio.h>
int main(int argc, char **argv)
{
char x[100];
sprintf(x, "%.4g", (double)123456);
printf(">%s<\n", x);
printf("%f\n", 1.235e+05);
return 0;
}
谢谢,
瓦伦丁
printf
精度有限不截断;它根据当前的舍入模式舍入。默认模式是舍入到最近的。由于 123456 比 123400 更接近 123500,因此打印前一个值。
对我来说,使用此转换时 1.234e+05 似乎很正常,因为当我们使用“%f\n”、1.235e+05 还原它时,我们得到 123500.000000 而不是希望的“ 123400.000000".
其实问题是:为什么跳过了“4”位?!
下面的例子会强化我想说的话:
#include <stdio.h>
int main(int argc, char **argv)
{
char x[100];
sprintf(x, "%.4g", (double)123456);
printf(">%s<\n", x);
printf("%f\n", 1.235e+05);
return 0;
}
谢谢, 瓦伦丁
printf
精度有限不截断;它根据当前的舍入模式舍入。默认模式是舍入到最近的。由于 123456 比 123400 更接近 123500,因此打印前一个值。