2017-05-08 12 views
0

1桁に四捨五入された数値は、依然として多くの桁でExcelに書き込まれます。例えばバリアントの丸め

dim myvar as variant 
dim mysingle as single 
dim myrange as range 

mysingle = 4567.23494376 
myvar = round(mysingle,1) 

myrange = "A1" 
myrange.value = myvar 

私はmyvarを書いているにもかかわらず、細胞は4567.2を表示するものの、セルをクリックすると、すべての桁で全体の値を示し、A1のセルに1桁に丸められてきました数式バーの仮数の右側に移動します。

この現象が起こるはずですか?

+0

はい、いいえ..それは依存https://support.microsoft.com/en-us/help/214118/how-to-correct-rounding-errors-in-floating-point-arithmetic – Slai

+3

このコードは構文的に間違っています。 'myrange =' 'Range''として' myrange = "A1" 'は動作しません。そして、 'Excel'は浮動小数点を' Double'精度で使うので、 'Excel'のためにVBAで' Single'を使うべきではありません。 –

+0

はい。 Single '4567.2'をDouble(キャレットがExcelをどのように使用するか)にキャストすると、その値は '4567.2001953125'になります。これはセル内に表示されます。 'Debug.Print myvar、CDbl(myvar)' –

答えて

4

てみmyvar = WorksheetFunction.Round(mysingle, 1)

代わりのmyvar = round(mysingle,1)


Roundが値を返すながらも、@YowE3K

WorksheetFunction.Round常にタイプVariant/Doubleの値を返すことによって提供以下の情報を参照してください。 input parameter()と同じタイプのこの場合は0)。

+2

あなたは 'WorksheetFunction.Round'はいつもの値を返すことを指摘して答えを編集したいかもしれませんが'Variant/Double'と入力し、' Round'は入力パラメータと同じ型の値を返します(この場合は 'Single')。 – YowE3K

+0

ありがとうYowE3K、私は説明を与えるためにこれらの情報を追加します。 – Mertinc

1

シングルを使用すると、ほとんど常に悪い考えです - Excelはダブルスを使用しています - ダブルスにシングルを変換すると、トラブルにつながる - このコードは、二重のために期待どおりに動作しますが、ラウンド

Sub roundit() 
Dim myvar As Variant 
Dim myDouble As Double 
Dim mySingle As Single 
myDouble = 4567.23494376 
mySingle = 4567.2 
myvar = Round(myDouble, 1) 

Range("a1").Value = myvar 
Range("a2").Value = mySingle 
End Sub 
を介さずに、単一のあなたの予想外の答えを与えます
+0

チャールズさんに感謝します。私はメモリを節約するためにシングルを使って賢いと思った。 – farmerandy