1

我有一个 Access 数据库,其中有一些数据通过 vba 代码转储到 Excel 工作簿中。有些值有一个很长的小数,我想四舍五入到最接近的十分之一。如果它是一个整数,我不希望将值四舍五入到第十位(即,我不希望将 45 四舍五入为 45.0),所以我使用以下代码:

If Fix(rstTmpRegularAndOvertimeHours!regularhours) = rstTmpRegularAndOvertimeHours!regularhours Then
      objWS.cells(intRowCount, 6).Value = rstTmpRegularAndOvertimeHours!regularhours
    Else
      objWS.cells(intRowCount, 6).Value = Round(rstTmpRegularAndOvertimeHours!regularhours, 1)
    End If

舍入的值显示在单元格中,但输入的实际值是未舍入的值。例如,值为 4.19999980926513,运行此代码时,单元格中显示值为 4.2,但如果单击该单元格,您会看到实际值为 4.19999980926513。当以下代码行运行时:

With objWS.PageSetup
    .Orientation = 2
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With

单元格展开以显示整个值并再次显示 4.19999980926513。我在其他地方使用了类似的代码,并且正在将正确的舍入值插入到电子表格中。有任何想法吗?

4

1 回答 1

3

对于二进制系统来说,小数部分是具有挑战性的。

Round()返回一个双精度浮点数。但是 4.2 不能完全存储double。因此,双精度值是 4.2 的近似值,它是使用双精度可以获得的最接近的值。

所以你在 Excel 中看到的是实际的双精度值。如果你想用一个小数位显示它——然后根据它调整列宽——将 Excel 列格式更改为“数字”,“小数位”属性为 1。

于 2013-09-30T18:15:51.170 回答