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

关于math函数的floor与round的区别

Math.round:如果参数是小数,则求本身的四舍五入。
Math.ceil:如果参数是小数,则求最小的整数但不小于本身.
Math.floor:如果参数是小数,则求最大的整数但不大于本身. 


Math.floor(302.4*100)=30329
Math.floor(402.4*100)=40240
为什么会这样?到底怎么取最的? --------------------编程问答--------------------
这个要问微软的。。。。 --------------------编程问答--------------------
引用 1 楼 foren_whb 的回复:
这个要问微软的。。。。
--------------------编程问答-------------------- Math.floor(302.4*100)=30239 
Math.floor(402.4*100)=40240 
这个确实奇怪,换成其他数字都是240 --------------------编程问答-------------------- 首先Math.Round不是四舍五入算法而是Banker算法...

其次如果你不知道IEEE 754浮点数误差问题就该去补习计算机原理课程... --------------------编程问答-------------------- Math.floor(302.4*100
==> Math.Floor(浮点数 * 100)
定义的double,float.. 等浮点数就会这样.
因为这些类型的数本身就不是整型数字,浮点数跟精度相关.
你看到的是302.4 实际储存的是浮点数 302.39999999999... ...

如果是这样:Math.Floor(new decimal(302.4) * 100) 就等于 30240
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,