楼主 Violet_Universe |
对于MOD函数参数全为正整数的我们不作深入讨论,只简单描述 一、第二参数为正数的情况 如=MOD(-2,3),函数是怎么得到结果的呢,首先让我们看看我们家的时钟吧 (1)以MOD(2,3)为例,形象如时钟1,函数会画个周期圆,3等分(以第二参数为标准) 注意:划分的时候是以顺时针绝对值增大的方向划分的,划好以后等人来转圈圈 然后由第一参数来绕圈跑,但是绕圈的方向是由自己与圆的划分方法(第二参数)决定的 因为圆的划法是顺时针且绝对值增大划分的,这个时候要看第一参数与第二参数的符号是否相同 很显然第一参数2也是正数,第二参数也是正数,所以第一参数就做了下面的动作 从圆的0点出发也是顺时针走了2步,很显然落在了圆的2点位置上,所以MOD(2,3)的值就是2 (2)以MOD(-2,3)为例,时钟怎么划分呢?跟上面的原理一样,以顺时针绝对值增大的方向划分的, 划好以后等第一参数来转圈 第一参数一看,自己与第二参数符号相反,所以第一参数-2背道而驰(逆时针)从原点走了两步 正好落在了时钟的1上面,所以MOD(-2,3)的值就是1 一、第二参数为负数的情况 我们依然以第二参数绝对值是3来说明(其他数字原理完全一样) (1)以MOD(2,-3)为例,形象如时钟2,函数会画个周期圆,3等分(以第二参数为标准) 注意:划分的时候是以顺时针绝对值增大的方向划分的,划好以后第一参数来转圈圈 因为圆的划法是顺时针且绝对值增大划分的,这个时候要看第一参数与第二参数的符号是否相同 很显然第一参数2是正数第二参数是负数,所以第一参数背道而驰,从圆的0点出发逆时针走了2步 从圆的0点出发逆时针走了2步,很显然落在了圆的-1点位置上,所以MOD(2,-3)的值就是-1 (2)以MOD(-2,-3)为例,时钟怎么划分呢?跟上面的原理一样,以顺时针绝对值增大的方向划分的, 划好以后等第一参数来转圈 第一参数一看,自己与第二参数符号相同,所以第一参数-2顺时针从原点走了两步 正好落在了时钟的-2上面,所以MOD(-2,-3)的值就是-2 总结1:周期(时钟的划分)是以第二参数的绝对值来划分的,至于是顺时针还是逆时针这个由你自己想象 但是第二参数的符号跟第一参数一样时,就按照时钟划分的方向跑,否则反向跑 最终求得的结果的符号一定与第二参数相同 探讨1:如果这些参数有小数怎么办呢? excel做的很简单,对他们进行一样的运算,第一参数走多少步算多少(包括小数) 探讨2:在VB,跟VBA中就不一样了,那是四舍六入五成双,而且最终的值必定是个整数,不会是小数的 而且最终的结果值的符号一定与MOD前面的数值相同,与后面一个无关 例如:K MOD L,在VB,VBA中,L不管是负数还是正数,都按照四舍六入五成双的原则舍入11111.jpg ![]() ![]() |
2楼 wjc2090742 |
不是四舍五入,是四舍六入五成双。sql中也是这样。 |
3楼 xpm130 |
同意翁版的看法。 mod()对小数的处置是遵从银行家舍入法的: 四舍六入五考虑,五后非零就进一, 五后皆零看奇偶,五前为偶应舍去, 五前为奇要进一。 |
4楼 亡者天下 |
学习了,谢谢楼主的分享 同时也感谢三楼,还成了诗句呢! |
5楼 LoveJinLee |
这跟我目前工作中四舍六入是一样的。 看来银行和计量在这上面是相通的~ |
6楼 rabbitllu |
没有理解,能给解释详细点吗,谢谢 |