VBScript 的 bug?(转)
2004-11-05 12:28
274 查看
VBScript 的 bug?
Web 开发/ASP.NET
Round 函数
返回按指定位数进行四舍五入的数值。
Round(expression[, numdecimalplaces])
参数
Expression
必选项。数值表达式 被四舍五入。
Numdecimalplaces
可选项。数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数。
说明
下面的示例利用 Round 函数将数值四舍五入到两位小数:
Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar contains 3.14。
可是,Round(1.25, 1) 返回的是 1.2,而不是 1.3……
原因: PC 采用的是 “四舍六入五成双”,而不是 “四舍五入”的方式。
(footballboy(郑创斌) 提供的原因)
他的原因我也贴出来:
回复人: footballboy(郑创斌) 2002-5-30 11:48:13
我以前就发现这个问题,探究了一番.结果如下:
我这样理解,若需要舍入到的位的后面"小于5"或"大于5"的话,按通常意义的四舍五入处理.若"若需要舍入到的位的后面"精确等于5",则舍入后末位为偶数,举例
MsgBox "round(1.25,1)=" & Round(1.25, 1)
显示结果为1.2,因为1.2之后的尾数"精确等于5",舍入后末位要求是偶数,所以舍入结果是小数1.2而不是大数1.3
MsgBox "round(1.25001,1)=" & Round(1.25001, 1)
显示结果为1.3,因为1.2之后的尾数"大于5",按四舍五入处理
MsgBox "round(1.35,1)=" & Round(1.35, 1)
显示结果为1.4,因为1.2之后的尾数"精确等于5",舍入后末位要求是偶数,所以舍入结果是大数1.4而不是小数1.3
同理
MsgBox "round(1.345,2)=" & Round(1.345, 2)
MsgBox "round(1.355,2)=" & Round(1.355, 2)
显示结果分别是1.34和1.36
我总结出的舍入规律是"四舍六入五成双",这里"四"是小于五的意思,"六"是大于五的意思,"五"是舍入位之后的尾数"恰等于5".
回复人: footballboy(郑创斌) 2002-5-30 12:04:12 得分:100
补充一下,我认为从统计学的角度,"四舍六入五成双"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均.而不是像四舍五入那样逢五就入,导致结果偏向大数.
例如:1.15+1.25+1.35+1.45=5.2,若按四舍五入取一位小数计算
1.2+1.3+1.4+1.5=5.4
按"四舍六入五成双"计算,1.2+1.2+1.4+1.4=5.2,舍入后的结果更能反映实际结果
Web 开发/ASP.NET
Round 函数
返回按指定位数进行四舍五入的数值。
Round(expression[, numdecimalplaces])
参数
Expression
必选项。数值表达式 被四舍五入。
Numdecimalplaces
可选项。数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数。
说明
下面的示例利用 Round 函数将数值四舍五入到两位小数:
Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar contains 3.14。
可是,Round(1.25, 1) 返回的是 1.2,而不是 1.3……
原因: PC 采用的是 “四舍六入五成双”,而不是 “四舍五入”的方式。
(footballboy(郑创斌) 提供的原因)
他的原因我也贴出来:
回复人: footballboy(郑创斌) 2002-5-30 11:48:13
我以前就发现这个问题,探究了一番.结果如下:
我这样理解,若需要舍入到的位的后面"小于5"或"大于5"的话,按通常意义的四舍五入处理.若"若需要舍入到的位的后面"精确等于5",则舍入后末位为偶数,举例
MsgBox "round(1.25,1)=" & Round(1.25, 1)
显示结果为1.2,因为1.2之后的尾数"精确等于5",舍入后末位要求是偶数,所以舍入结果是小数1.2而不是大数1.3
MsgBox "round(1.25001,1)=" & Round(1.25001, 1)
显示结果为1.3,因为1.2之后的尾数"大于5",按四舍五入处理
MsgBox "round(1.35,1)=" & Round(1.35, 1)
显示结果为1.4,因为1.2之后的尾数"精确等于5",舍入后末位要求是偶数,所以舍入结果是大数1.4而不是小数1.3
同理
MsgBox "round(1.345,2)=" & Round(1.345, 2)
MsgBox "round(1.355,2)=" & Round(1.355, 2)
显示结果分别是1.34和1.36
我总结出的舍入规律是"四舍六入五成双",这里"四"是小于五的意思,"六"是大于五的意思,"五"是舍入位之后的尾数"恰等于5".
回复人: footballboy(郑创斌) 2002-5-30 12:04:12 得分:100
补充一下,我认为从统计学的角度,"四舍六入五成双"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均.而不是像四舍五入那样逢五就入,导致结果偏向大数.
例如:1.15+1.25+1.35+1.45=5.2,若按四舍五入取一位小数计算
1.2+1.3+1.4+1.5=5.4
按"四舍六入五成双"计算,1.2+1.2+1.4+1.4=5.2,舍入后的结果更能反映实际结果
相关文章推荐
- 开源推荐系统crab里面的一处bug
- 和各种诡异 Bug 打交道 13 年,我总结了 18 条经验
- cocos2d-x CCTableView动态插入删除元素bug修正及动画表现 (转)
- Y2K Accounting Bug - 2586
- 微软软件也有字串处理的低级bug!
- 捷克下chcp 437命令无效, Microsoft的bug?
- 一个关于Delphi XML处理单元的BUG
- FindBugs——帮助查找隐藏的bug
- Android中出现的一些BUG的解决方法
- 如何跟程序员谈一场没有Bug的恋爱
- ASP(VBScript) 函数
- 居然是BUG~!
- 记录:做Hibernate+Struts2学生管理系统遇到的BUG
- iOS 11 BUG的发现、定位和解决
- 【VBScript Shell】使用vbs shell调用命令行exe的示例代码
- Android 曾经的小Bug(常识)
- ASP、vbscript编码模板
- VBScript学习笔记--第一章.数据类型和操作符
- Android TextInputLayout使用,解决setErrorEnabled的bug
- 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug