14.1 float变量赋值3.1,printf的值为3.0999999?

大多数电脑都是用二进制来表示浮点和整数的。

在十进制里, 0.1 是个简单、精确的小数,

但是用二进制表示起来却是个循环小数0.0001100110011 . . . 。

所以 3.1 在十进制内可以准确地表达, 而在二进制下不能。

在对一些二进制中无法精确表示的小数进行赋值或读入再输出时,

也就是从十进制转成二进制再转回十进制, 你会观察到数值的不一致。

这是由于编译器二进 制/十进制转换例程的精确度引起的,

这些例程也用在printf 中。

参见问题14.6。

永不止步步 发表于01-18 10:22 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:305917个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号