C 为什么用科学的符号来表示;(双)123456“;加上“%”。4g“;转换为;1.235e和x2B;05“;而不是1.234e+;05

C 为什么用科学的符号来表示;(双)123456“;加上“%”。4g“;转换为;1.235e和x2B;05“;而不是1.234e+;05,c,notation,C,Notation,对我来说,使用此转换时,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

对我来说,使用此转换时,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;
}
#包括
int main(int argc,字符**argv)
{
charx[100];
sprintf(x),"%.4g",(双倍)123456 ;;

printf(“>%s
printf
精度有限,不会截断;它会按照当前舍入模式进行舍入。默认模式是舍入到最近。由于123456更接近123500而不是123400,所以会打印前一个值。

看起来它只是向上舍入到我,而不是“跳过一个数字”“。是的,这是正常的四舍五入,因为123456比123400更接近123500。