我有一个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。我在其他地方使用类似的代码,并在电子表格中插入正确的舍入值。有什么想法吗?
答案 0 :(得分:3)
二进制系统的十进制分数很有挑战性。
Round()
返回双精度浮点数。但4.2不能将完全存储为double。所以相反,double值是4.2的近似,它是你用双精度得到的最接近的值。
那么您在Excel中看到的是实际的双倍值。如果要使用单个小数位显示它---然后根据该值调整列宽度 - 将Excel列格式更改为“数字”,将“小数位”属性更改为1。