当前位置:编程学习 > C#/ASP.NET >>

c# 中精度的问题

--------------------编程问答-------------------- 用你的代码编译出来没有这个问题,结果是29330.1514 --------------------编程问答-------------------- 代码调试结果没问题啊 --------------------编程问答-------------------- double 就如float一样,涉及小数的时候,都是不精确的 --------------------编程问答-------------------- 晕,为什么我这显示那么多的小数部分, --------------------编程问答-------------------- 奇怪,我在一个简单的程序里调试是正确的,也显示29330.1514。

但是在我的程序段里就显示不对了,不知道什么原因,大侠看看,以下是断点的,列了几个变量方便查看
见图


其中 alist[p],alist[p-1],alist[p-2] 分别是-96064.9824,-66734.831,-109207.41
实际上,这几个数字都是从一个txt文本读进来的,上面的步骤应该没问题,因为在pp,pp_1,pp_2中分别显示出来了



--------------------编程问答-------------------- 没人知道么?急啊 --------------------编程问答-------------------- 什么叫float/double因为都是浮点数,所以都是有精度限制的,当加减乘除运算后,就可能偏差,一般这个偏差需要代码来控制,例如四舍五入等。 --------------------编程问答-------------------- 翻看《计算机组成原理》可以解释楼主的疑惑。 --------------------编程问答-------------------- 楼上能不能稍微解释下,因为我做了近一万个这样的计算,只有几个数据是出现小数位过多的,求解释啊,先把这个问题解决了再去看看您推荐的书, --------------------编程问答-------------------- 你有空做一万个计算,没空花5分钟看书? --------------------编程问答-------------------- 关键是我没这本书,楼上。5分钟看书,但得需要两天去买书
一万个计算计算机算起来也用不着5分钟吧,
引用 10 楼 yuwenge 的回复:
你有空做一万个计算,没空花5分钟看书?
--------------------编程问答-------------------- 这个肯定是精度的问题,但是LZ的代码我测试没问题呢,你得给我一份场景重现的代码版本,然后才能分析你的问题,因为你的上下文估计还有东西 --------------------编程问答-------------------- 我来告诉你把
因为DOUBLE嘿嘿,他再编译的时候最后会被转换成2禁止数据,也就是01010101010之类的东西,因为他的长度有限制,所以在运算的时候会出现你这种情况,也就是不精确,建议使用de什么什么的那个类型
应该就不会出现这个问题了 --------------------编程问答-------------------- 有牛人给我补充一下,具体的长度限制和转换出现的原因我给忘记了,以前听老师给我讲了一下,可惜上课一直在睡觉。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,