请问这道程序中的Math.Round(11.5)的结果为啥第一次是11而第二次是12?
--------------------编程问答-------------------- 楼主,我查了一下官网的例子,好像说的是由于浮点值 .1 没有有限的二进制表示形式,第一次用 11.5 值调用 Round(Double) 方法时得到的值为 11 而不是 12。不过还是看不太懂,坐等大神解释。 --------------------编程问答-------------------- 11.1连续加4次得到的11.5和直接给11.5两者有微小的误差。 --------------------编程问答--------------------11.1连续加4次得到的11.5小于11.5,那个输出的11.5分明是迷惑人的 --------------------编程问答-------------------- 11.1连续加4次得到的11.5是四舍六入后进位得到的11.5。 --------------------编程问答-------------------- 浮点数只能表示2^x的累加和,而0.1只能去一个近似值。
如果出现这种情况,说明编译器对于0.1的取值是小于0.1。 --------------------编程问答-------------------- 所以除非必要,尽量不要使用浮点数。 --------------------编程问答--------------------
Math.Round(11.5,0, MidpointRounding.AwayFromZero)--------------------编程问答-------------------- .Net中用的是更为精确科学的四舍六入五成双
正如2L版主说的,相加时其实时有精度误差的,这是浮点数的存储方式导致的,如果你将double换成decimal就不会了 --------------------编程问答-------------------- 四舍六入五成双!不是我们传统理解的四舍五入,百度一下
补充:.NET技术 , C#