规则:
四舍六入五考虑,
五后非零就进一,
五后皆零看奇偶,
五前为偶应舍去,
五前为奇要进一。
function evenRound(num, decimalPlaces) { var d = decimalPlaces || 0; var m = Math.pow(10, d); var n = +(d ? num * m : num).toFixed(8); // Avoid rounding errors var i = Math.floor(n), f = n - i; var e = 1e-8; // Allow for rounding errors in f var r = (f > 0.5 - e && f < 0.5 + e) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n); return d ? r / m : r; }
ASP中其实有两个可以用作四舍五入的函数:Round函数和FormatNumber函数。
返回按指定位数进行四舍五入的数值。
Round(expression[, numdecimalplaces])
参数
Expression
必选项。数值表达式 被四舍五入。
Numdecimalplaces
可选项。数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数。
FormatNumber(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit]]]]。
参数
Expression
必选项。
Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。
LeadingDigit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。
Paren 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。
GroupDigit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。
EXAMPLE: <%=Round(3.14159, 2)%>
RESULT: 3.14
EXAMPLE: <%=FormatNumber(45.324567, 3)%>
RESULT: 45.325
虽然Round函数叫做四舍五入函数,但是他所说的四舍五入与我们平常说的并不一样,我们平时的是:大于等于5的数值入、小于5的数值舍。但是,Round函数却是大于5的数值入、小于5的数值舍、等于5的话奇数入偶数舍。
Round(1.5)
Round(2.5)
Round(3.5)
Round(4.5)
FormatNumber(1.5,0)
FormatNumber(2.5,0)
FormatNumber(3.5,0)
FormatNumber(4.5,0)
Round的结果是:
2
2
4
4
FormatNumber的结果是:
2
3
4
5
看样子,如果真的要使用四舍五入的函数,还是用FormatNumber的准确一些!