舍入值未正确插入Excel

舍入值未正确插入Excel,excel,ms-access,vba,Excel,Ms Access,Vba,我有一个Access数据库,其中有一些数据通过vba代码转储到Excel工作簿中。有些值有很长的小数点,我想四舍五入到最接近的十分之一。如果值是一个整数,我不希望将其四舍五入到第十位(即,我不希望将45四舍五入到45.0),因此我使用以下代码: If Fix(rstTmpRegularAndOvertimeHours!regularhours) = rstTmpRegularAndOvertimeHours!regularhours Then objWS.cells(intRowCo

我有一个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。我在其他地方使用了类似的代码,并在电子表格中插入了正确的舍入值。有什么想法吗?

十进制分数对于二进制来说是个挑战

Round()
返回双精度浮点。但4.2不能完全作为双精度存储。所以double值是4.2的近似值,它是用double可以得到的最接近的值


因此,您在Excel中看到的是实际的双精度值。如果要以单个小数点显示,然后根据该小数点调整列宽,请将Excel列格式更改为“数字”,其中“小数点”属性为1

我不知道
FIX()。这意味着你不会陷入
的困境,而
的FIX()
只是简单地截断任何小数,因此如果
FIX([number])=[number]
这意味着没有小数,所以我不需要四舍五入(从而防止45变成45.0)。我在代码的其他地方也使用了同样的逻辑,让它对值进行四舍五入并将四舍五入的值插入到单元格中没有问题。我已经浏览了代码,它确实落入了
的其他部分
——事实上,如果我插入
MsgBox(Round(rstTmpRegularAndOvertimeHours!regularhurs,1))
,它会给我4.2,但这不是插入Excel的值。不知何故,舍入值没有结转。谢谢-这很有效。我仍然不完全理解为什么这个有时有效,而另一些则无效,但是改变单元格的格式是有效的。(我不想更改整个列的格式,因为我不想得到前面描述的45.0)。谢谢