テキストボックスに表示するために、double値の小数点以下の桁数を切り捨てる必要があります。 VBAでこれをどのように実現しますか?
VBAのROUND
にはFORMAT
を使用できます。
たとえば、小数点以下2桁を表示するには
Dval = 1.56789
Debug.Print Round(dVal,2)
Debug.Print Format(dVal,"0.00")
注:上記は1.57
。だからあなたが探しているなら1.56
次に、Dvalを文字列に格納し、これを行うことができます
Dim strVal As String
dVal = 1.56789
strVal = dVal
If InStr(1, strVal, ".") Then
Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
Debug.Print dVal
End If
round値にしたい場合は、Round関数を使用できます(ただし、VBAのRound関数はBankerの丸め(round-to-evenとも呼ばれます)を使用することに注意してください。 or down;従来の丸めを使用して丸めるには、Formatを使用します。
丸めずにtruncate値にしたい場合、受け入れられた回答のように文字列を使用する必要はありません-数学を使用してください:
Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345
Dim lScale = 10 ^ lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale) / lScale
これにより、「2.34」が生成されます。
Int()関数を使用できます。 Debug.print Int(1.99543)
またはより良い:
_Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function
_
したがって、Trunc(1.99543, 4)
==> _result: 1.9954
_を使用できます
とても楽しい話。私は簡単なVB変換関数をいじっていました。doubleを切り捨てて整数にしたいだけです。
value = Int(83.768)
value == 83
すごい、VBにあるものが実際に機能した。
おっと、私はそれが負の数で動作しないことを忘れました
value = Int(-83.768)
value == -84
...ええ、ちょうどそれが起こりました。 VBはバンカー丸めを使用します。
Public Function Trunc(ByVal value As Double) As Integer
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Trunc = (Abs(value) / value) * Int(Abs(value))
End Function
特定の小数点以下の桁数が必要な場合は、Makahが値の周囲のAbsのみで行ったようにして、Intが適切に切り捨てられるようにします。
Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Dim sign As Integer
sign = Abs(value) / value
Trunc2 = sign * (Int(Abs(value) * (10 ^ num)) / (10 ^ num))
End Function