社区
C++ 语言
帖子详情
看下printf("%.2lf\n", 4.015);这条语句
paschen
版主
2012-04-03 11:06:23
为何输出的是4.01,而预计是要输出4.02的
难道这就是传说的浮点数精度的问题
求原因
求怎么解决
...全文
369
10
打赏
收藏
看下printf("%.2lf\n", 4.015);这条语句
为何输出的是4.01,而预计是要输出4.02的 难道这就是传说的浮点数精度的问题 求原因 求怎么解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paschen
版主
2012-04-08
打赏
举报
回复
嗯嗯,谢谢大家的意见
nice_cxf
2012-04-05
打赏
举报
回复
对有些小数,用double不能精确表示的,做4舍5入的时候只是简单判断是否小于5,因此被舍掉了,当然加一个很小的数可以解决这个问题,但是这个数很难选择,小了没效果,大了可能把不应该入的入了。。。要看你输入数据的取值范围
paschen
版主
2012-04-05
打赏
举报
回复
内存中存的4.015其实是4.0149999999999997,肯定小于5,好像没解决办法了
paschen
版主
2012-04-04
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
你用函数四舍五入在输出来。
[/Quote]
我用函数四舍五入也不行
附我写的四舍五入函数的代码
double round(double d,unsigned p) //p是精确的位数
{
if(d==0.0)
return 0.0;
double n=10;
for(;p>0;p--)
n*=10;
if(d>0.0)
return (__int64)(d*n+5) / 10 / (n/10);
else
return (__int64)(d*n-5) / 10 / (n/10);
}
主函数里你输出round(4.015,2)看下
paschen
版主
2012-04-04
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
printf不会四舍五入的,没人这么告诉你的,不要想当然哦。
[/Quote]
你自己换个数试下先
青霜无痕
2012-04-04
打赏
举报
回复
你可以把它乘以1000判断第三位数是不是大于等于5
paschen
版主
2012-04-04
打赏
举报
回复
刚刚自己调试时发现:4.015在内存中表示的数其实是4.0149999999999997
汗,应该是浮点数精度的问题导致了四舍五入出错
同样的,4.22225精确4位输出的也只是4.2222
MK
2012-04-04
打赏
举报
回复
应该是IEEE浮点格式的问题了~~~~好像是尾数那部分结构所致
asb2010
2012-04-03
打赏
举报
回复
你用函数四舍五入在输出来。
满衣兄
2012-04-03
打赏
举报
回复
printf不会四舍五入的,没人这么告诉你的,不要想当然哦。
嵌入式软件调试专题2:
printf
函数打印高阶技巧
分享使用
printf
打印的技巧:包括控制打印开关、打印等级控制、以及打印函数
printf
缓冲机制带来的打印延迟问题,让你在工作、学习、软件debug中提高工作效率!
C语言
printf
格式化输出,参数详解
有关输出对齐int main(int argc, char* argv[]){ char insertTime[20] = {"1234567890"}; double insertTime1 = 12321;
printf
("|%-15s|/n",insertTime); //左对齐,15位长度,不够补空格
printf
("|%15s|/n",insertTime); //右对齐,15位长度...
选择结构题库a
1.从键盘上输入直角坐标系上一个点的坐标(x,y),编程实现判断该点属于第几象限。 请注意在x坐标轴上、y坐标轴上和原点上的数据。 #include <stdio.h> int main() { float x,y; scanf("%f%f",&x,&y); if(x==0&&y==0)
printf
("(%.2f,%.2f)在原点上",x,y); else if(x==0)
printf
("(%.2f,%.2f)在y坐
c语言基础程序——100实例
/根据公示Π/4=1-1/3+1/5-1/7+1/9-1/11+......,计算Π的近似值,当最后一项的绝对值小于0.000001为止。int f=1;//变号用//i是分母,sum是Π/4的值while (fabs(1.0/i)>=1e-6)//当绝对值小于10的-5次方认为为0//累加每项的值f*=-1;//变号i+=2;//分母+2变化
printf
("Π的近似值为%.5lf",sum*4);
(算法笔记)2.3小节-》选择结构
本节全部解法代码 A: 例题4-1 一元二次方程求根 题目描述 求一元二次方程ax2+bx+c=0的根,三个系数a, b, c由键盘输入,且a不能为0,但不保证b2-4ac>0。 程序中所涉及的变量均为double类型。 输入 以空格分隔的一元二次方程的三个系数,双精度double类型 输出 分行输出两个根如下(注意末尾的换行): r1=第一个根 r2=第二个根 结果输出时,宽度占7位,其中...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章