日期:2014-05-16  浏览次数:21039 次

请教一个很简单却很蛋疼的数字相减问题。

代码如下:

<%=22.5+16+7.2+3-47.9%>
--按一下计算器,应该等于0.8
--在不使用formatnumber来格式化结果的前提下
——实际输出显示.800000000000004


请指教。

------解决方案--------------------
因为是浮点数

浮点数计算是精确到小数点后很多位的,而且不会四舍五入只会截断固定小数位
------解决方案--------------------
引用:
代码如下:

<%=22.5+16+7.2+3-47.9%>
--按一下计算器,应该等于0.8
--在不使用formatnumber来格式化结果的前提下
——实际输出显示.800000000000004


请指教。

浮点数的计算本身就有偏差的
------解决方案--------------------
先去了解浮点数的知识吧
------解决方案--------------------
楼主也提出了 解决办法   
既然只是想讨论的话
3楼 正解。。。
------解决方案--------------------
所以蛋疼只因你压根没弄懂浮点数。
------解决方案--------------------
楼主去了解下浮点数的存储,

如果是0.25 + 1.5 +1.125 简单说只要能直接换算成 2进制的浮点数表示法的结果就是准确的
否者比如0.9 换成 2进制后是 0.XXXXXXXX ...XXXY  一共是浮点数能表示的长度,但是最后一位Y是根据实际运算Y后面那位 如果是1 那么就再Y位上+1 如果是直接抹去Y位后面的无限小数。
所以像0.9 0.2 这样的数据是无法用浮点数精确表示的,简单说就是一个无线循环小数
比如这个0.111101111111 ... 实际存储 是0.11111111111具体位数多少依赖浮点数的存储规则