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

专注编程优化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 怎么运作的
...全文
291 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
  • 打赏
  • 举报
回复
可以自己写个函数来解决呀
内容概要:本文介绍了如何利用 GitHub Copilot 辅助进行程序调试与 Bug 分析,强调 Copilot 不仅可用于代码生成,更是强大的代码分析与调试工具。文章详细阐述了 Copilot 在调试复杂问题、老旧项目维护和难以复现 Bug 场景下的优势,提出了“先分析、再修改”的四步流程:分析原因→评估风险→提出方案→修改代码,并推荐结合错误日志、用户操作等信息精准提问,提升 AI 回答质量。同时展示了如何通过 Copilot 增强调试能力,如自动加日志、异常保护、生成测试数据和性能分析。最后通过游戏拾取系统的实际案例,说明如何结构化描述问题以获得有效反馈。; 适合人群:具备一定开发经验,正在参与项目调试或维护工作的程序员,尤其是面对复杂逻辑、历史代码或难复现 Bug 的 1-3 年开发者;也适合希望提升 AI 协作能力的技术人员。; 使用场景及目标:①快速定位偶发性崩溃、数据异常等问题根源;②理解无文档或结构混乱的老代码模块;③优化调试流程,借助 AI 生成诊断建议、修复方案与测试用例;④构建更具健壮性的程序,提前发现潜在缺陷。; 阅读建议:学习者应结合自身项目中的真实问题,按照文中提供的结构化提问模板实践,逐步训练与 Copilot 的协作能力,重视问题描述的完整性与准确性,避免直接要求修改代码,优先通过分析提升对系统的理解。
内容概要:本文针对高精度电流控制下的永磁同步电机(PMSM)参数辨识难题,提出一种基于粒子群优化算法(PSO)的多参数辨识模型,并在Simulink环境中完成系统级仿真实现。研究旨在克服传统控制中因电机参数(如定子电阻、交直轴电感、永磁磁链等)随温度、负载变化而失配所导致的电流控制性能下降问题。通过构建以电流跟踪误差为核心的适应度函数,利用PSO算法全局寻优能力强的特点,实现对关键电机参数的在线或离线精确辨识。文中详述了PSO算法的实现机制、参数初始化策略、收敛判据设计以及与PMSM矢量控制系统的集成方法,验证了该方案在不同运行工况下的辨识精度、收敛速度与鲁棒性,显著提升了电流环的动态响应品质与稳态控制精度。; 适合人群:具备电机驱动控制、现代控制理论及优化算法基础,熟悉MATLAB/Simulink仿真平台,从事高性能PMSM控制系统研发的研究生、高校科研人员及自动化、电力电子领域的工程师;特别适合正在开展参数自适应、智能控制算法应用等相关课题的研究者。; 使用场景及目标:①应用于高端制造装备、电动汽车驱动系统、精密伺服系统等对电流控制精度要求严苛的场合;②解决实际工程中因电机温升、老化等因素引发的参数漂移问题,提升系统长期运行稳定性;③作为智能优化算法与电机控制深度融合的教学案例,帮助理解PSO在复杂非线性系统参数辨识中的应用逻辑与实现路径。; 阅读建议:建议读者结合提供的Simulink仿真模型进行复现实验,重点剖析PSO算法模块与电机控制模型的接口设计、适应度函数的构建原则及参数敏感性分析方法,可进一步尝试引入其他先进优化算法(如GWO、HHO)进行性能对比,以深入掌握不同智能算法在工程辨识问题中的适用性与优劣。

7,787

社区成员

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

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