Round,Fix,Int函数杂谈

Round 函数
返回按指定位数进行四舍五入的数值。

Round(expression[, numdecimalplaces])

参数
Expression

必选项。数值表达式 被四舍五入。

Numdecimalplaces

可选项。数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数。

说明
下面的示例利用 Round 函数将数值四舍五入到两位小数:

Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar contains 3.14。

Int、Fix 函数
返回数字的整数部分。

Int(number)

Fix(number)

number 参数可以是任意有效的数值表达式。如果 number 参数包含 Null,则返回 Null。

说明
Int 和 Fix 函数都删除 number 参数的小数部分并返回以整数表示的结果。

Int 和 Fix 函数的区别在于如果 number 参数为负数时,Int 函数返回小于或等于 number 的第一个负整数,而 Fix 函数返回大于或等于 number 参数的第一个负整数。例如,Int 将 -8.4 转换为 -9,而 Fix 函数将 -8.4 转换为 -8。

Fix(number) 等同于:

Sgn(number) * Int(Abs(number))下面的示例说明 Int 和 Fix 函数如何返回数字的整数部分:

MyNumber = Int(99.8)    ' 返回 99。
MyNumber = Fix(99.2)    ' 返回 99。
MyNumber = Int(-99.8)   ' 返回 -100。
MyNumber = Fix(-99.8)   ' 返回-99。
MyNumber = Int(-99.2)   ' 返回 -100。
MyNumber = Fix(-99.2)   ' 返回 -99。

问题:
大家试试下面的代码:
Response.Wriet(round(4.5))
Response.Wriet(round(4.6))
Response.Wriet(round(3.5))
Response.Wriet(round(2.5))
Response.Wriet(round(1.5))


怎么样你的结果是什么?

结果:
4
5
4
2
2

嗯!好像不对?4.5和2.5的四舍五入结果有问题,难道是ASP的bug?

慢。。。这是个误会!

看看书上是怎么说的:
Round 函数在指定位为5的时候判断四舍五入时是根据前面数的奇偶来判断的,
            为奇数时进位,为偶数时舍位

现在大家应该明白了,为什么出现上面的结果了。
但是问题还是没有解决,
1.ASP问什么这样处理
2.如果要对数字四舍五入怎么办,自己写方法?

大家不要着急听我慢慢说来
1.ASP这样处理的原因
       实际上程序中的舍入大部分都不是四舍五入而是1-4舍,6-9入,5则返回最接近的偶数。这是金融中的要求,因为四舍五入中1-4舍,5-9入,舍入概率比为4/5,并不平均,这在金融中是非常重要的,只有将5取最接近的偶数才能在概率上做到对等。
2.可以使用FormatNumber
示例:
FormatNumber(1.5,0)
FormatNumber(2.5,0)
FormatNumber(3.5,0)
FormatNumber(4.5,0)
也可以使用Fix,Int函数,只是截取数字的整数部分。

哈哈!!!这回问题都解决了。

原文地址:https://www.cnblogs.com/meil/p/716460.html