C语言浮点读取到小数点3位并保存到变量

一个不知道几位数的双精度浮点 读取到小数点后3位并且保存在一个变量怎么做?
y = 125.6789123.....
x = 读取3位(y)
谢谢
最新回答
雨点躲日落

2024-10-14 08:25:59

#include<stdio.h>
int main(void)
{
double a=123.456789;
double b;
b=(int(a*1000+0.5))/1000.0;
printf("a=%f\tb=%f\n",a,b);
return 0;
}

凭栏听雨

2024-10-14 09:34:08

计算机内部存放用2进制。10进制数存放时,要做 10到2进制转换,输出时还要再转换回来。
而 10进制到2进制,2进制到10进制,转换时常常不能“化净”,会引入误差。
把数乘1000,化成整数,再化成double, 再除以1000.0 对于较小的数,可以,但对于大的double型数就困难了。因为int 型存不下那么大的数。

要干干净净地 读取到小数点后3位,可以改用字符串变量存放,那就确确实实干净利落的 小数点后3位。
例如:
#include <stdio.h>
int main(){
double y=987654125.678987654321;
char s[50];
sprintf(s,"%.3lf",y); // 10进制,小数点后3位,并自动4舍5入
printf("%s\n",s);
return 0;
}
——_曾说过爱我

2024-10-14 09:28:51

使用十进制整数四舍五入的方法后自动切断能达到保留小数,比如:12344.567到小数点后两位,并在3四舍五入的:双X = 1234.567;整数XX,X * = 100,X + = 0.5; XX =(INT )×X =(双)xx/100;
青衫

2024-10-14 08:18:13

if(y < 0.0) {
    sign = -1;
    y = -y;
}
x = (int)((1000 * y + 0.5)/1000)*sign;