| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 454 人关注过本帖
标题:意料之外的问题,请大家看看!!!!憋半天了儿,呵呵
只看楼主 加入收藏
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
结帖率:16.67%
收藏
已结贴  问题点数:10 回复次数:9 
意料之外的问题,请大家看看!!!!憋半天了儿,呵呵
#include <stdio.h>
int main(void)
{
    int i = 0;
    float money[5];
    long dollars[5];
    float cents[5];

    for(i=0;i<5;i++)
    {
      printf("\nEnter the money_number:$  ");
      scanf("%f",&money[i]);
      dollars[i] = (long)money[i];
      cents[i] = money[i]-((long)money[i]);
      printf("%ld",dollars[i]);
      printf("\n%f",cents[i]);
      
    }
    getchar();
    getchar();
    return 0;
}
运行结果是这样的
图片附件: 游客没有浏览图片的权限,请 登录注册

我的问题是,为什么输入22.3和32.3,小数部分为什么是0.299999,而不是0.300000
搜索更多相关主题的帖子: dollars include return 
2012-08-12 13:40
zl111817
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2012-8-12
收藏
得分:3 
精准度问题

欲望以提升热忱,毅力以磨平高山。
2012-08-12 14:54
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
收藏
得分:0 
能详细说下吗
2012-08-12 14:56
zl111817
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2012-8-12
收藏
得分:0 
你把float改成double试试

欲望以提升热忱,毅力以磨平高山。
2012-08-12 14:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
你解释一下代码中所做的那些运算和转型是什么用意?

授人以渔,不授人以鱼。
2012-08-12 15:10
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int i = 0;
    double money[5];
    long dollars[5];
    long cents[5];

    for(i=0;i<5;i++)
    {
      printf("\nEnter the money_number:$  ");
      scanf("%lf",&money[i]);
      dollars[i] = (long)money[i];
      cents[i] = (long)((money[i]-(long)money[i])*100.0);
      printf("%ld",dollars[i]);
      printf("\n%ld",cents[i]);
      
    }
    getchar();
    getchar();
    return 0;
}
   
 运行后:
图片附件: 游客没有浏览图片的权限,请 登录注册
   
这里1.2  12.2  23.2  有问题,这里long 应该没有精准度的问题吧?
2012-08-12 15:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把float转型为long,然后又用float-long,有没有问题自己多写几个代码测试一下呗。
这种莫名其妙的运算逻辑,写得出来都不知道派什么用场,玩代码、考试可能用得着。找那些老学究给你解释就对了。

授人以渔,不授人以鱼。
2012-08-12 15:21
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
收藏
得分:0 
你解释一下代码中所做的那些运算和转型是什么用意?
就是将整数部分存入到一个数组中,小数部分存储到一个数组中,然后输出他们,比如输入2.75 输出还是2.75
2012-08-12 15:22
经典记忆
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2012-7-19
收藏
得分:0 
呵呵,我就是遇到问题了想弄清楚
2012-08-12 15:24
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
这就是个数据精度问题,如果用float的地方都用double是基本没这个问题的.(数据在内存中是以二进制存储的,有些浮点数或双精度数是不能与二制数完全转化的,当将内存中的数据再转化成十进制数的时候就可能不是原来的数了,这取决于精度)

[ 本帖最后由 cnfarer 于 2012-8-12 16:03 编辑 ]

★★★★★为人民服务★★★★★
2012-08-12 16:01
快速回复:意料之外的问题,请大家看看!!!!憋半天了儿,呵呵
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035872 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved