怎样解决浮点数的精度问题呢?

烂笔头Danky 2005-03-29 07:32:02
一个浮点数在内存里存储时存在精度的问题,超过允许的精度都不能保存下来,就如:3.1415926这个浮点数用一个long double的类型来保存,在输出时也却只能输出3.14159,请问有什么办法可以解决这样的精度问题吗?
...全文
277 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocklabzhang 2005-03-30
  • 打赏
  • 举报
回复
可以转化成字符串再运算
不过这样要专门写个类处理
烂笔头Danky 2005-03-30
  • 打赏
  • 举报
回复
请帮忙看看这段程序,我的程序是试图把0.1415926这样的小数转换成1415926这样的整数,当fValue=3.1415926时程序可以正常工作,但当fValue=0.1415926时就进入了死循环变得不正常了,请问这是什么原因,应该怎样解决呢?

long double fValue = 0.1415926;
while ( (fValue-(long)fValue) != 0.0 )
{
fValue *= 10;
cout <<"fValue:" <<fValue <<endl;
cout <<"(long)fValue:" <<(long)fValue <<endl;
cout <<"fValue-(long)fValue:" <<fValue-(long)fValue <<endl <<endl;
}
hjf8086 2005-03-30
  • 打赏
  • 举报
回复
cout<<setiosflags(ios::fixed)<<setprecision(7)
fixed是固定浮点数
setprecision(7)小数点后7位显示
pcboyxhy 2005-03-30
  • 打赏
  • 举报
回复
最彻底的方法就是写一个高精度类
烂笔头Danky 2005-03-29
  • 打赏
  • 举报
回复
那它们各自是什么意思啊?
xtutzh 2005-03-29
  • 打赏
  • 举报
回复
cout<<fixed<<showpoint<<setprecision(7)

请可以说一下这里面的是什么意思吗,我估计这个(7)是用来指明输出的位数吧,这个fixed曾经见过,在印象中好像是用来控制输出的位数,但这个showpoint和setprecision是关键字吗?还是变量名呢?
它们不是关键字,而是 iostream的成员函数。注意:cout是内置的iostraam类的一个对象。


烂笔头Danky 2005-03-29
  • 打赏
  • 举报
回复
cout<<fixed<<showpoint<<setprecision(7)

请可以说一下这里面的是什么意思吗,我估计这个(7)是用来指明输出的位数吧,这个fixed曾经见过,在印象中好像是用来控制输出的位数,但这个showpoint和setprecision是关键字吗?还是变量名呢?请指教!
arrowcy 2005-03-29
  • 打赏
  • 举报
回复
如果使用c++的标准输入输出的话,就按照 JYcom(天神的眼泪) 说的做就行了
如果用C函数printf,就用那个%?.?f格式就可以了
arrowcy 2005-03-29
  • 打赏
  • 举报
回复
你说那个问题不是存储的精度问题,而是输出精度的问题
用cout输出默认就是6位有效数字
JYcom 2005-03-29
  • 打赏
  • 举报
回复
包含头文件:#include<iomanip>
然后在输出时cout<<fixed<<showpoint<<setprecision(7)即可。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧