【求大佬解惑】

三舞 2019-06-24 09:03:04
这个数值为啥会是这样
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
三舞 2019-06-25
  • 打赏
  • 举报
回复
引用 5 楼 android2008的回复:
[quote=引用 4 楼 weixin_45024354 的回复:]
[quote=引用 3 楼 android2008的回复:]pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式

就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧[/quote]
前半段对的
但把a定义成double不一定能解决问题,如果你需要输出整数的话。[/quote] 嗯嗯,谢谢老哥,我自个再去试试
android2008 2019-06-25
  • 打赏
  • 举报
回复
引用 4 楼 weixin_45024354 的回复:
[quote=引用 3 楼 android2008的回复:]pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式

就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧[/quote]
前半段对的
但把a定义成double不一定能解决问题,如果你需要输出整数的话。
三舞 2019-06-25
  • 打赏
  • 举报
回复
引用 3 楼 android2008的回复:
pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式
就是说9999是因为精度造成的,最后一个负数是存不下10^10。把a定义成双精度就可以解决999999的问题对吧
android2008 2019-06-25
  • 打赏
  • 举报
回复
pow接受的参数和返回的值是double类型的,int类型和double类型互转会有精度问题,那些99999999就是因为这个原因,要避免这个问题,可以把pow的返回值加一个小的小数,比如 0.000001再转成整数 a=pow(10,i) + 0.000001
另外楼上说的,int表示的数是有限的,表示不了10的10次方,所以后面出来的是负数
你需要改成long long或64位int类型,相应的printf里也需要把%d改成对应的格式
C语言小白008 2019-06-25
  • 打赏
  • 举报
回复
int不够大,你可以改成long类型试一下
三舞 2019-06-24
  • 打赏
  • 举报
回复
还有一个问题是不是pow不能直接用在输出语句中

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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