C语言 小数保留问题

float x, b; int m;
scanf_s("%f",&x);
m = (1000 * x + 0.5);
b = m / 1000;
printf("保留小数点后三位的数是:%f",b);
//我输入123.4567,然后结果是123.00000,为毛啊?
不应该是123.457吗?

b = m / 1000;是先除在转float,不是先转再除。因为m和1000都是整数。所以m/1000除完会截掉小数,整数部分再转float.
如果b=m*1.0/1000就是你要的结果了

m是整数,你那样除,就不是浮点数了,转成float

m/1000会得到整数部分

其实 想将输入的 浮点数 保留小数点后 三位 在不做四舍五入的前提下 就不需要 整除 之类的转换操作 下面的代码就能 达到你想要的效果

 int main ( int argc, char *argv[] )
{
    double inf=0.0;  //对于浮点数 使用double 要比float要好
    scanf("%lf",&inf);
    printf( "%.03lf\n",inf );
    return 0;

} /* end main */

参考代码段,总有你想要的
https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c