sdf*_*dfg 19 c floating-point double c89
我想在C中将double转换为float,但希望尽可能保留小数点而不做任何更改......
例如,假设我有
double d = 0.1108;
double dd = 639728.170000;
double ddd = 345.2345678
Run Code Online (Sandbox Code Playgroud)
现在纠正我,如果我错了,我知道浮点精度大约是点后的5个数字.我可以在双点之后得到那五个数字吗?以上结果如下:
float f = x(d);
float ff = x(dd);
float fff = x(ddd);
printf("%f\n%f\n%f\n", f, ff, fff);
Run Code Online (Sandbox Code Playgroud)
它应该打印
0.1108
639728.17000
345.23456
Run Code Online (Sandbox Code Playgroud)
精度限制之后的所有数字(我假设为5)将被截断.
dan*_*n04 29
float并且double不存储小数位.它们存储二进制位置:float是(假设IEEE 754)24个有效位(7.22个十进制数字),double是53个有效位(15.95个有效数字).
转换double为float将给你最接近的可能float,所以舍入不会帮助你.走另一条路可能会给出十进制表示中的"噪音"数字.
#include <stdio.h>
int main(void) {
double orig = 12345.67;
float f = (float) orig;
printf("%.17g\n", f); // prints 12345.669921875
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要获得double您想要的十进制值的近似值,您可以编写如下内容:
double round_to_decimal(float f) {
char buf[42];
sprintf(buf, "%.7g", f); // round to 7 decimal digits
return atof(buf);
}
Run Code Online (Sandbox Code Playgroud)