C++编程 CString用atof转换成float时,值从0.39999变成了0.39998999.请问是什么问题?该怎么解决?
4个回答
展开全部
浮点数的精度有限,不是每个你用字符串写出来的小数都有完全对应的浮点数的。
要解决,你可以使用更高精度的浮点数,或者特殊的小数处理类库,或者用定点数表示浮点数
要解决,你可以使用更高精度的浮点数,或者特殊的小数处理类库,或者用定点数表示浮点数
追问
特殊的小数处理类库,或者用定点数表示浮点数 怎么做呢?
追答
特殊的小数处理库,是指专门为小树精确计算编写的库,具体使用因库而异。
定点数,是指用整数存储逻辑上的小数,但你自己要知道小数点在哪里
比如用12345678来表示123456.78这样的数,来进行小数点后两位的计算,避免浮点数的问题,因为整数加减是精确的。前提是你的程序中要记得小数点实际位置
展开全部
对精度要求更高的话,可以使用strtod()。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
浮点数精度问题
可以在输出时格式化的方法解决:sprintf(stdout, "%.5f", n);这样输出, 就是0.39999
可以在输出时格式化的方法解决:sprintf(stdout, "%.5f", n);这样输出, 就是0.39999
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
浮点数转换的基础规则:如十进制的 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+...),因为位数有限,最后会出现“掉位”。
这个是有解决办法的,不过现在就快上课了
说了上边的基础后,能知道方法是: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+...),因为位数有限,最后会出现“掉位”。
这个是有解决办法的,不过现在就快上课了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询