如何使用VBA将数字四舍五入保留2位小数并正确写入Excel单元格
VBA写入单元格出现浮点精度尾差的解决办法
问题根源
这是Single单精度浮点数据类型的固有缺陷:单精度浮点数采用二进制存储,无法精确表示所有十进制小数,即使你做了保留2位小数的四舍五入操作,变量底层存储依然会存在微小的精度误差,写入单元格时就会暴露多余的错误尾数位。
解决方案
你可以选择以下任意一种方案解决:
- 方案1:替换变量类型为精度更高的
Currency或DecimalCurrency类型专为十进制小数计算设计,默认支持4位小数精度,完全覆盖你保留2位小数的需求,修改后代码如下:Dim MyLimit As Currency MyLimit = Round(Worksheets("Sheet1").Range("Y1").Value, 2) Debug.Print MyLimit Worksheets("Sheet2").Range("AB2") = MyLimit - 方案2:直接调用工作表函数处理后赋值,无需额外声明变量
如果不需要复用中间变量,可以直接在赋值时调用工作表级Round函数(比VBA原生Round更符合日常四舍五入逻辑),同时可搭配单元格格式设置保证显示效果:Worksheets("Sheet2").Range("AB2") = WorksheetFunction.Round(Worksheets("Sheet1").Range("Y1").Value, 2) ' 根据你的区域设置调整数字格式,逗号作为小数点可使用格式"0,00" Worksheets("Sheet2").Range("AB2").NumberFormat = "0.00" - 方案3:仅需显示正确的最简处理
如果你不需要用到单元格的实际数值做后续计算,只需要显示为0,93,直接设置AB2单元格的数字格式为保留2位小数即可,不用修改原有代码。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

