首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

将数字分解如2.76,分解成2 和 76 输出,为什么有误解决办法

2012-04-01 
将数字分解如2.76,分解成2和 76 输出,为什么有误C/C++ code//编写一个程序,从键盘读入5个值,将他们存储到

将数字分解如2.76,分解成2 和 76 输出,为什么有误

C/C++ code
//编写一个程序,从键盘读入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;}


输出结果
================

please input no.1:2.36
$2.360000 is 2 dollars and 35 cents
please input no.2:2.34
$2.340000 is 2 dollars and 33 cents
please input no.3:2.97
$2.970000 is 2 dollars and 97 cents
please input no.4:8.26
$8.260000 is 8 dollars and 26 cents
please input no.5:7.45
$7.450000 is 7 dollars and 44 cents
Press any key to continue

=======================

为什么输入2.36 却得到 2 和 35

[解决办法]
编译器有误差,精确度有误差,改下这行代码就好了(0.00001在误差范围内)
C/C++ code
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就对了

热点排行