问题描述
我今天作了个代码,是计算路费的,如果算出结果代小数点的我就用MATH.FLOOR()给小数点去掉小数点以后的都不要了。但是我今天TEST的时候发现了个问题。如:doublea=3000;doubleb=0.29;doublec=a*b;我用调试模式时发现.在即时窗口我输入?a*b869.99999999999989a*b869.99999999999989?c.ToString()"870"的出的结果却是这个样子我不明白为什么会出现这个情况,请告诉给我解答一下正常情况我用计算器算3000*0.29=870;但是这里面却是869.99999999999989;
解决方案
解决方案二:
浮点数总会有一点微小的误差,LZ有兴趣可以学习一下IEEE754试试Math.Floor(Math.Round(c,2)),不知道行不行,期待楼下的高手
解决方案三:
有没有人告诉我啊
解决方案四:
關注
解决方案五:
告诉我啊老大们
解决方案六:
因为浮点数是没有0这个概念的,所有的数都是有精度的。这也就是为什么你一乘会出现869.99999999999989的奇怪数字的原因,因为所有的数字都有一个精度问题,所以使用Double型的值一定要限定一个精度.
解决方案七:
是精度问题,电脑的计算方法跟你的不一样的。
解决方案八:
因为很多浮点小数都是不精确的,doubleb=0.29;从这个数储存到计算机中开始,它已经是一个近似数你直接输出下b看看计算机里面只有二进制十进制小数到二进制小数有个转换过程只有2的负幂的和,才是二进制有限小数其他都是无限小数,必然会损失精度的~
解决方案九:
谢谢老大们啊感谢
时间: 2024-11-03 00:17:57