1、请问为什么1.00001的结果不对呢
2、0.12345678的结果是什么原因造成的,有没有处理的办法呢
以下是代码及测试用例和结果
1.%g是根据结果自动选择科学记数法还是一般的小数记数法,此处只是输出方式不对
2.默认小数输出6位,四舍五入即为答案,可采用%.xf格式控制宽度
float的精度只有6位小数
由于二进制位数限制,浮点数有截断误差的。比如你上面输入1.001,它不能精确地用float表示出来。一般float类型可以精确到小数点后7位,double类型能精确到小数点后15位。
可以使用 modf()函数操作
#include <stdio.h>
#include <math.h>
int main() {
double x=1.00001, intpart; //为变量赋初值
double fractpart = modf(x, &intpart);
printf("intpart: %lf\nfractpart: %lf\n", intpart, fractpart);
return 0;
}