发布7个四舍五入的函数,不看不知道,一看吓一跳

专注VB编程开发20年 2013-08-24 12:13:04
round(3.1456,2)=3.15
round(3.145,2)=3.14
round(3.145,1)= 3.1
round(3.146,1)=3.1
round(3.256,1)=3.3
round(3.255,1)=3.3
round(3.25,1)=3.2
求好心人告知 round 怎么运作的
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2013-08-27
  • 打赏
  • 举报
回复
英文 MSDN:
Round Function Description Returns a number rounded to a specified number of decimal places. Syntax Round(expression [,numdecimalplaces]) The Round function syntax has these parts: Part Description ------------------ -------------------------------------------- expression Required. Numeric expression being rounded. numdecimalplaces Optional. Number indicating how many places to the right of the decimal are included in the rounding. If omitted, integers are returned by the Round function.
中文 MSDN 中的四舍五入是翻译错误,正确的术语应该舍入取整,随意脑补的翻译坑了不知多少人。 How To Implement Custom Rounding Procedures 一文对舍入做了具体说明。 又:微软的 Basic 的目标是商用软件,有一种对 BASIC 命名的释义与通常的 (Beginner's All-purpose Symbolic Instruction Code) 不同,具体记不全了,其中 B 是 Business 的缩写。 自带的函数库中,VBA.Financial 下面有十几个财务相关的函数。 所以 Round 函数采用所谓银行家舍入法(Banker's Rounding)的“四舍六入五成双”舍入法不稀奇。这是对借贷双方完全平等的舍入方式,而不像四三五人法有偏向性。
贝隆 2013-08-27
  • 打赏
  • 举报
回复
Round函数 描述 返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。 语法 Round(expression [,numdecimalplaces]) Round函数语法有如下几部分: 部分 描述 expression 必需的。要进行四舍五入运算的数值表达式。 numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。
Treenewbee 2013-08-26
  • 打赏
  • 举报
回复
所谓的“四舍六入五成双”
worldy 2013-08-24
  • 打赏
  • 举报
回复
四舍五入五不入 比如 4.55==>4.5 /4.51-->4.6
  • 打赏
  • 举报
回复
大家有什么得意的算法或函数,也可以公开交流一下,补充大家的弹药库,每一个函数都是我们的一粒子弹哦,没有函数,就没有新生活。 这是国际标准,我们所说的四舍五入只是一个通常用法,精确一点就是ROUND 最近在做一个报表,这个报表有个原例子,原例子是用asp做的,按理两个报表显示的结果应该是一样的。可不知为什么,显示的小数总是差点,找来找去原来是round函数惹的。 VB6中文版说Round函数是四舍五入函数,实际上这个函数采用的四舍六入五留双。VB的Round所采用的算法是这样的: 1.25留一位,则1.2=round(1.25) 如果是1.35,则1.4=round(1.35) 奇进偶不进。这样在一大串需要四舍五入的数相加相减相乘时误差小一点。eg:1.25+1.35+1.45+1.55+1.15+1.65=8.4=round(1.25)+round(1.35)+round(…… ROUND函数符合国家和国际标准,该函数是正确的。原先的四舍五入只是一个简化。 在微软的Knowledge Base的文章:“Q194983 PRB: Round Function Different in VBA 6 and Excel Spreadsheet”和微软的Knowledge Base的文章:“Q189847 INFO: New String and Format Functions in Visual Basic 6.0”中都指出Round函数实行Banker舍入,而不是我们习惯的算术舍入(四舍五入)。你可以参考微软的Knowledge Base的文章:“Q196652 HOWTO: Implement Custom Rounding Procedures”,它对于舍入问题有详细的讨论。

Private Sub Command1_Click()
Text4 = 四舍五入6(Text1, Text2)
Text3 = 四舍五入(Text1, Text2)
End Sub
Function 四舍五入(数字, 小数位数)
   四舍五入 = Format(数字, "." & String(小数位数, "0"))
End Function

Private Sub Form_Load()
Text1 = 3.145
Text2 = 2
Text3 = ""
Text4 = ""
End Sub

Function 四舍五入1(数字, 小数位数)
Dim C As Long
C = 10 ^ 小数位数
四舍五入1 = Int((数字 * C + 0.5)) / C
End Function
Function 四舍五入2(数字, 小数位数)
On Error Resume Next
Dim v As Long, D As Long
D = InStr(数字, ".")
v = Mid(数字, D + 小数位数 + 1, 1)
四舍五入2 = Left(数字, D + 小数位数) + IIf(v > 4, 0.1 ^ 小数位数, 0)
End Function
 
Function 四舍五入3(数字, 小数位数)
Dim C As Long
C = 10 ^ (小数位数 + 1)
四舍五入3 = Int((数字 * C + 5) / 10) / C * 10
End Function
Function 四舍五入4(数字, 小数位数)
 四舍五入4 = Format(数字, Left(0.1 ^ (小数位数 + 1), 小数位数 + 1))
End Function
Function 四舍五入6(数字, 小数位数)
'国际标准,四舍六入五留双
 四舍五入6 = Round(数字, 小数位数)
End Function
Function 四舍五入7(数字, 小数位数)
Dim C As Long
C = 10 ^ 小数位数
四舍五入7 = Fix((数字 * C + 0.5)) / C
End Function
舉杯邀明月 2013-08-24
  • 打赏
  • 举报
回复
round()函数,好象是 在舍入位为5时:   如果后面还有有效数字,就“入”(进位);     比如 round(3.25,1)=3.2 , round(3.25001,1)=3.3   如果没有,就“留双”(要保留的那位是奇数,就进位;要保留的那位是偶数,就去尾)。     比如:round(3.35,1)=3.4 , round(3.25,1)=3.2 其它情况,大家都能很好理解了:   在舍入位小于5时(0~4)就去尾;在舍入位大于5时(6~9)就进位。
zetor 2013-08-24
  • 打赏
  • 举报
回复
可以自己写个函数来解决呀

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧