将数字分解如2.76,分解成2 和 76 输出,为什么有误
//编写一个程序,从键盘读入5个值,将他们存储到一个float类型的数组amounts中//创建两个包含5个long元素的数组dollars和cents//将amounts数组元素的整数部分存储到dollars的对应元素中//amounts的数组元素的小数部分存储到cents中,只保存两位数字//例如 amonunts[1]是2.75,则把2保存到dorrlars【1】,把75存储到cents[1],//以货币格式输入这2个long类型数组的值如 $2.75#include <stdio.h>#include <math.h>int main(void){ float amounts[5]; long int dollars[5]; long int cents[5]; for(int i=0;i<5;i++) { printf("please input no.%d:",i+1); scanf("%f",&amounts[i]); //printf("%f\t",amounts[i]); dollars[i]=(long int)floor(amounts[i]); //printf("%ld",dollars[i]); cents[i]=(long int)100*(amounts[i]-floor(amounts[i])); // printf("%ld\n",cents[i]); printf("$%f\tis %ld\t dollars and %ld cents\n",amounts[i],dollars[i],cents[i]); } return 0;}cents[i]=(long int)100*(amounts[i]-floor(amounts[i])+0.00001);
[解决办法]
浮点误差,2.36有可能是2.359999转整形的时候要加上一个很小的数如0.0000001消除误差
[解决办法]
我在vs2005中测试了你的程序,跟踪了一下floor
发现你输入的2.36,在到floor函数中时,显示的是2.3599999这就是出现35的原因了...
在scanf输入时,就错了
[解决办法]
http://topic.csdn.net/u/20100526/22/4eb79931-79d7-4068-85ce-b36012434133.html
float改double就好
scanf_s("%lf",&amounts[i]);改称%lf就对了