| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:数据类型
只看楼主 加入收藏
bccnba
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-8-5
结帖率:25%
收藏
已结贴  问题点数:10 回复次数:5 
数据类型
运行下面代码会出现如下警告:choosing\choosing\5.8.c(26): warning C4244: “=”: 从“double”转换到“float”,可能丢失数据
求大神解释一下是什么原因,我并没有定义double型变量啊



#include <stdio.h>
void main()
{
    float b1, b2, b4, b6, b10,d;
    long int i;
    int c;
    b1 = 100000 * 0.1;
    b2 = b1 + 100000*0.075;
    b4 = b2 + 200000*0.05;
    b6 = b4 + 200000*0.03;
    b10 = b6 + 400000*0.015;
    scanf_s("%ld", &i);
    if (i >1000000)c = 10;
     else c = i / 100000;
    switch(c)
    {
        case 0:d = i*0.1; break;
        case 1:d = b1 + (i - 100000)*0.075; break;
        case 2:
        case 3:d = b2 + (i - 200000)*0.05; break;
        case 4:
        case 5:d = b4 + (i - 400000)*0.03; break;
        case 6:
        case 7:
        case 8:
        case 9:d = b6 + (i - 600000)*0.015; break;
        case 10:d = b10 + (i - 1000000)*0.01; break;
    }
    printf("%5.2f", d);
}
2015-08-17 22:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
看书上文字常量的部分

授人以渔,不授人以鱼。
2015-08-17 22:31
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:4 
参数0.1默认是double类型,(float)0.1  或 0.1f  才是float类型
双精度类型转单精度类型不丢失精确才有问题呢!
图片附件: 游客没有浏览图片的权限,请 登录注册



2015-08-18 06:53
柳逸尘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:131
注 册:2015-8-10
收藏
得分:4 
你可以把float换成double的试试,scanf_s最好换成scanf
2015-08-18 08:48
bccnba
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-8-5
收藏
得分:0 
回复 3楼 hjx1120
thank you
2015-08-19 11:13
bccnba
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-8-5
收藏
得分:0 
回复 4楼 柳逸尘
2015-08-19 11:23
快速回复:数据类型
数据加载中...
 
   



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

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