请问printf输出固定小数点后数字位数的double型,最后一位是四舍五入的么?

[复制链接]
查看11 | 回复5 | 2017-10-15 17:11:49 | 显示全部楼层 |阅读模式
不是bug,因为浮点数是用2进制表示的,在小数位数后的十进制数十很难用2进制能够表示出来的,如0.1(10)约=0.0001100110...(2)
(无限循环)所以一般都会有误差...
回复

使用道具 举报

千问 | 2017-10-15 17:11:49 | 显示全部楼层
最后一位是四舍五入。#include int main(){
double d1 = 12.535, d2 = 12.534;
printf("d1 = %.2lf, ...
回复

使用道具 举报

千问 | 2017-10-15 17:11:49 | 显示全部楼层
不是,如0.15估计被表示成0.149999之类。因为浮点数是用2进制表示的,在小数位数后的十进制数十很难用2进制能够表示出来的,如0.1(10)约=0.0001100110...(2)
(无限循环)所以一般都会有误差...
回复

使用道具 举报

千问 | 2017-10-15 17:11:49 | 显示全部楼层
如果最后一位是5,就是要舍弃的一位是5,进1还是不进要看5的前一位是奇数还是偶数,在分析学处理数据时有一个原则就是像你这样输出的。...
回复

使用道具 举报

千问 | 2017-10-15 17:11:49 | 显示全部楼层
这个和具体的电脑有关系,每台电脑对浮点数的处理可能都不同,为了安全输出,一般用这种方式printf("%.1lf",a+0.05);...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行