鱼C论坛

 找回密码
 立即注册
查看: 709|回复: 7

[已解决]新手提問,浮點數打印問題

[复制链接]
发表于 2021-12-1 22:32:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代碼
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float y = 100.099f ;
  5.         printf("%f", y) ;
  6.         return 0 ;
  7. }
复制代码


會打印出來
  1. 100.098999
复制代码


為啥會這樣呢??
最佳答案
2021-12-2 00:55:12
本帖最后由 jackz007 于 2021-12-2 01:08 编辑

       一个 32 位数只能表达 4294967295 个不同的数值,普通浮点数在计算机内部正是通过一个 32 位数来进行保存的,就是说,32 位浮点数的理论极限表达能力是 4294967295 个不同的浮点数,这个数目远远小于32位浮点所能表达的数值范围,这就意味着浮点数只能做到近似表达,存在精度问题。
       你可以想象我们用尺子测量长度时的情景,一把尺子的刻度总是有限的,但是,我们总是可以通过一把刻度有限的尺子去测量各种长度。浮点数在计算机内部保存的正是被刻度化的数值,不可能做到你赋值多少,它就能按照原样保存多少。所以,计算机中的浮点数与生俱来地存在着精度问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-1 22:35:26 | 显示全部楼层

回帖奖励 +1 鱼币

精度问题
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         double y = 100.099 ;
  5.         printf("%lf", y) ;
  6.         return 0 ;
  7. }
复制代码
印出
  1. 100.099000
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 抱歉,剛剛沒看到這樓!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-2 00:55:12 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 jackz007 于 2021-12-2 01:08 编辑

       一个 32 位数只能表达 4294967295 个不同的数值,普通浮点数在计算机内部正是通过一个 32 位数来进行保存的,就是说,32 位浮点数的理论极限表达能力是 4294967295 个不同的浮点数,这个数目远远小于32位浮点所能表达的数值范围,这就意味着浮点数只能做到近似表达,存在精度问题。
       你可以想象我们用尺子测量长度时的情景,一把尺子的刻度总是有限的,但是,我们总是可以通过一把刻度有限的尺子去测量各种长度。浮点数在计算机内部保存的正是被刻度化的数值,不可能做到你赋值多少,它就能按照原样保存多少。所以,计算机中的浮点数与生俱来地存在着精度问题。

评分

参与人数 1荣誉 +5 鱼币 +3 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 3 + 3 感謝回覆!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-2 09:30:01 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-2 20:50:58 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         double y = 100.099 ;
  5.         printf("%f", y) ;
  6.         return 0 ;
  7. }
复制代码


可以問一下
如果%後面只有"f"也能打印出一樣的東西
使用"lf"有什麼特別的用意嗎?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 22:06:15 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-2 20:50
可以問一下
如果%後面只有"f"也能打印出一樣的東西
使用"lf"有什麼特別的用意嗎?

%f 表示输出 float 类型,%lf 表示输出 double 类型

评分

参与人数 1荣誉 +5 鱼币 +2 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 2 + 3 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-2 22:31:54 | 显示全部楼层
傻眼貓咪 发表于 2021-12-2 22:06
%f 表示输出 float 类型,%lf 表示输出 double 类型

了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?
還是這之後會造成一些問題?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-2 22:34:57 | 显示全部楼层
一隻太平洋睡鯊 发表于 2021-12-2 22:31
了解~~問最後一個問題
%f也能打印出同樣的內容
是因為%f也能夠打印double類型變數?

可以打印,基本上 float 和 double 一样是浮点数,只是运算过程中 double 比 float 精准度更高(能存放数据更大)

评分

参与人数 1荣誉 +5 鱼币 +2 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 2 + 3 了解!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 11:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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