鱼C论坛

 找回密码
 立即注册
查看: 5054|回复: 8

类型转换

[复制链接]
发表于 2013-7-25 09:27:37 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 咿呀咿呀喂 于 2013-7-26 09:13 编辑

void   main()
{
        float PI=3.14159;
        int s,r=5;
        s=r*r*PI;
        printf("s=%d\n",s);
}
得出来的结果是s=78。这个没问题,然后我改了一下,把s定义为double型,即
void   main(){   
      float PI=3.14159;
      double s;      
      int r=5;  
      s=r*r*PI;  
      printf("s=%d\n",s);
}
为什么s=1342177280呢?


最佳答案

查看完整内容

{:7_183:}s是double型为什么要用%d的格式输出咩?应用%lf或%g。 float PI=3.14159f 默认3.14159是double型,加上后缀f/F指定其为float型。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 09:27:38 | 显示全部楼层
本帖最后由 Potato丶 于 2013-7-25 10:25 编辑

{:7_183:}s是double型为什么要用%d的格式输出咩?应用%lf或%g。

float PI=3.14159f   默认3.14159是double型,加上后缀f/F指定其为float型。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 10:52:39 | 显示全部楼层
2楼 版主已经说了,这个要追究根本原因的话就看看内存吧,主要是 浮点数存储格式。研究一下就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 16:37:17 | 显示全部楼层
学习了,好像输入输出都要格式化正确点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 16:41:19 | 显示全部楼层
double型就别用%d
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 22:52:58 | 显示全部楼层
因为是%d,这是输出整形,字节不同,%lf输出吧,字节不同,就会越过,取到后面的内存,我不知道怎么表达。:'(
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-26 09:15:08 | 显示全部楼层

哈哈哈,学习了~~~~~~~我以为%d输出整形的,系统会自动舍去小数部分
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-26 09:16:11 | 显示全部楼层
Potato丶 发表于 2013-7-25 09:27
s是double型为什么要用%d的格式输出咩?应用%lf或%g。

float PI=3.14159f   默认3.14159是doub ...

float PI=3.14159,前面有个float了,后面加不加f都可以吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-26 12:52:11 | 显示全部楼层
咿呀咿呀喂 发表于 2013-7-26 09:16
float PI=3.14159,前面有个float了,后面加不加f都可以吧

不加的话好像会有警告。个人觉得加不加一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-18 05:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表