为什么使用“%.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,因此打印前一个值。