网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月28日
漏签
0
天
c语言吧
关注:
798,923
贴子:
4,355,837
看贴
图片
吧主推荐
视频
游戏
1
2
下一页
尾页
16
回复贴,共
2
页
,跳到
页
确定
<<返回c语言吧
>0< 加载中...
数值精度问题,求教
只看楼主
收藏
回复
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include<stdio.h>#define pi 3.141592653int main(){ int a1,a2; double a3,ra,q; q=41.40; a1=(int)q; a2=(int)(100*(q-a1)); a3=100*(100*(q-a1)-a2); ra=(a1+a2/60.0+a3/3600.0)*pi/180; printf("%d %d %lf",a1,a2,a3); return 0;}
输入的是41.40,为什么输出的是41,39 ,100
mahaojie299
低能力者
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
太乱了太乱了
2025-05-28 11:06:49
广告
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include<stdio.h>
#define pi 3.141592653
int main(){ int a1,a2;
double a3,ra,q;
q=41.40;
a1=(int)q;
a2=(int)(100*(q-a1));
a3=100*(100*(q-a1)-a2);
printf("%d %d %lf\n",a1,a2,a3);
return 0;}
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
存储的时候数值改变了,把double类型换成float之后a2正确,但是a3会出问题
mahaojie299
低能力者
5
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
改一下%lf试试
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
在调试过程中a1=(int)q;里面的q的值显示的就是41.3999999999
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
加类型是什么意思?是指强制转换使用的int吗?
晓丹不哭
超能力者
9
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
41.400000 %f打印、、、
2025-05-28 11:00:49
广告
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
输出的时候的确还是41.40,但是a2输出的值是39,a3输出的值是100.000
shenjian19
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你用float就可以明显看出了知道了。。
float使用6位精度。41.40实际存储是41.3999996185,float取六位小数点后就是41.399999,所以a1为41,a2为39,a3就是99.6185。同理你用精度为double,就保证至少13位精度。这时你用 100乘肯定是100,你可以用 a3 = pow(10,15)*(100 * (q-a1) -a2)试试结果,应该为99...多少。
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
a1本来就是整形,那个int加不加无所谓的,只是一个警告,不会报错,也没有影响的,系统默认强制转换为int类型
雾月の沉默
便当
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这个怎么样存储才能保证在计算过程中不会因为存储精度问题影响最后结果啊?
shenjian19
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
小数点后用至少同等精度的参数赋值
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示