1

VBAコードを介してExcelワークブックにダンプされたデータがあるAccessデータベースがあります。一部の値には、最も近い 10 分の 1 に丸めたい長い小数があります。値が整数の場合、値を 10 分の 1 に丸めたくない (つまり、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 として正確に格納することはできません。代わりに、double 値は4.2 の近似値であり、double で得られる最も近い値です。

Excel で表示されているのは、実際の double 値です。小数点以下 1 桁で表示したい場合は --- そしてそれに基づいて列幅を調整します --- Excel の列形式を「数値」に変更し、「小数点以下の桁数」プロパティを 1 にします。

于 2013-09-30T18:15:51.170 に答える