C++编程 CString用atof转换成float时,值从0.39999变成了0.39998999.请问是什么问题?该怎么解决?

 我来答
Irreproducible
2012-04-15 · TA获得超过451个赞
知道小有建树答主
回答量:305
采纳率:100%
帮助的人:452万
展开全部
浮点数的精度有限,不是每个你用字符串写出来的小数都有完全对应的浮点数的。
要解决,你可以使用更高精度的浮点数,或者特殊的小数处理类库,或者用定点数表示浮点数
追问
特殊的小数处理类库,或者用定点数表示浮点数 怎么做呢?
追答
特殊的小数处理库,是指专门为小树精确计算编写的库,具体使用因库而异。

定点数,是指用整数存储逻辑上的小数,但你自己要知道小数点在哪里
比如用12345678来表示123456.78这样的数,来进行小数点后两位的计算,避免浮点数的问题,因为整数加减是精确的。前提是你的程序中要记得小数点实际位置
青雲.
2017-01-20 · TA获得超过217个赞
知道小有建树答主
回答量:249
采纳率:100%
帮助的人:64.9万
展开全部
对精度要求更高的话,可以使用strtod()。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黯湮灬逍遥
2012-04-22 · TA获得超过339个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:312万
展开全部
浮点数精度问题

可以在输出时格式化的方法解决:sprintf(stdout, "%.5f", n);这样输出, 就是0.39999
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
da_city
2012-04-27 · TA获得超过111个赞
知道答主
回答量:17
采纳率:0%
帮助的人:9.9万
展开全部
浮点数转换的基础规则:如十进制的 0.5 = 2的-1次方,0.25 = 2的-2次方,同理,0.125 = 2的-3次方。以此下去
说了上边的基础后,能知道方法是:0.5(10) = 0.1(2),0.25(10) = 0.01(2),0.75 = 0.5+0.25 = 0.11(2),0.625 = 0.5+0.125 = 0.101
细心会发现,存在将一个有穷的十进制的小数转为无穷二进制的现象(例如0.7 = 0.5+0.125+0.625+...),因为位数有限,最后会出现“掉位”。
这个是有解决办法的,不过现在就快上课了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式