# Currency

This is a value data type.
Use the Currency data type to store numbers in the range from -922,337,203,477.5808 (-9.22 E14) to 922,337,203,685,477.5807 (+9.22 E14)
You should use this data type when you do not want any rounding errors.
Currency is exact, Single and Double are rounded.
This data type is useful for calculations in which accuracy is particularly important.
These are stored as 64 bit (8 byte) numbers in an integer format, scaled by 10,000 to give a fixed point number.
This data type uses 8 bytes
The default value is 0.
This data type allows you to save numbers in specific number formats

`Dim myCurrency As Currency myCurrency = 922337203685477.5807@ Call MsgBox(myCurrency) `

The @ at the end of the second line is a Variable Abbreviation Character
This data type has an accuracy of 15 digits to the left of the decimal point.
This data type has an accuracy of 4 digits to the right.

`Dim myCurrency As Currency myCurrency = 12345678901234567890 Call MsgBox(myCurrency) myCurrency = 100.123456 Call MsgBox(myCurrency) `

### Losing Precision

You will lose precision if you convert a Decimal value with 5 decimal places to a variable of type Currency.
Use the Currency data type to avoid rounding errors when precision is of the utmost importance.

### Excel Round Trip

Enter the number 100.123456 into cell "A1" and format this with a currency number format

`Dim myVariant As Variant myVariant = Range("A1").Value If TypeName(myVariant) = "Currency" Then    Call MsgBox("currency") End If `

This number is converted into a Currency data type.
This automatic data type conversion of a Double into a Currency is not a good thing and can lead to a loss of precision when putting the value back into Excel.
If you use the Value2 property then this conversion does not take place.

`Dim myVariant As Variant myVariant = Range("A1").Value2 If TypeName(myVariant) = "Double" Then MsgBox("double") `

`Public Sub RunCurrency() Dim myCurrency As Currency    myCurrency = 1    Do       On Error GoTo ErrorHandler       myCurrency = myCurrency * 2       Debug.Print myCurrency    Loop ErrorHandler:    Stop End Sub `

### Conversion Function

The CCUR function returns an expression converted to a Currency data type.