.NET Framework Class Library
Decimal Structure

Represents a decimal number.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)
Syntax
<[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_0%]> _
<[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_1%](True)> _
Public Structure Decimal _
	Implements [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_2%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_3%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_4%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_5%],  _
	[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_6%](Of Decimal), [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_0_0_7%](Of Decimal)
[[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_0%]]
[[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_1%](true)]
public struct Decimal : [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_2%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_3%], 
	[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_4%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_5%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_6%]<decimal>, [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_1_0_7%]<decimal>
[[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_0%]]
[[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_1%](true)]
public value class Decimal : [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_2%], 
	[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_3%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_4%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_5%], [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_6%]<Decimal>, 
	[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_2_0_7%]<Decimal>
[<[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_0%]>]
[<[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_1%]>]
[<[%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_2%](true)>]
type Decimal =  
    struct 
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_3%] 
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_4%] 
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_5%] 
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_6%] 
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_7%]<decimal>
        interface [%$TOPIC/1k2e8atx_en-us_VS_110_1_0_3_0_8%]<decimal>
    end
JScript supports the use of structures, but not the declaration of new ones.

The Decimal type exposes the following members.

Constructors
  NameDescription
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Double)Initializes a new instance of Decimal to the value of the specified double-precision floating-point number.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Int32)Initializes a new instance of Decimal to the value of the specified 32-bit signed integer.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Int32)Initializes a new instance of Decimal to a decimal value represented in binary and contained in a specified array.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Int64)Initializes a new instance of Decimal to the value of the specified 64-bit signed integer.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Single)Initializes a new instance of Decimal to the value of the specified single-precision floating-point number.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(UInt32)Initializes a new instance of Decimal to the value of the specified 32-bit unsigned integer.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(UInt64)Initializes a new instance of Decimal to the value of the specified 64-bit unsigned integer.
Public method Supported by the XNA Framework Supported by Portable Class Library Decimal(Int32, Int32, Int32, Boolean, Byte)Initializes a new instance of Decimal from parameters specifying the instance's constituent parts.
Top
Methods
  NameDescription
Public method Static member Supported by the XNA Framework Supported by Portable Class Library AddAdds two specified Decimal values.
Public method Static member Supported by Portable Class Library CeilingReturns the smallest integral value that is greater than or equal to the specified decimal number.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library CompareCompares two specified Decimal values.
Public method Supported by the XNA Framework Supported by Portable Class Library CompareTo(Decimal)Compares this instance to a specified Decimal object and returns a comparison of their relative values.
Public method Supported by the XNA Framework CompareTo(Object)Compares this instance to a specified object and returns a comparison of their relative values.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library DivideDivides two specified Decimal values.
Public method Supported by the XNA Framework Supported by Portable Class Library Equals(Decimal)Returns a value indicating whether this instance and a specified Decimal object represent the same value.
Public method Supported by the XNA Framework Supported by Portable Class Library Equals(Object)Returns a value indicating whether this instance and a specified Object represent the same type and value. (Overrides ValueTypeEquals(Object).)
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Equals(Decimal, Decimal)Returns a value indicating whether two specified instances of Decimal represent the same value.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library FloorRounds a specified Decimal number to the closest integer toward negative infinity.
Public method Static member FromOACurrencyConverts the specified 64-bit signed integer, which contains an OLE Automation Currency value, to the equivalent Decimal value.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library GetBitsConverts the value of a specified instance of Decimal to its equivalent binary representation.
Public method Supported by the XNA Framework Supported by Portable Class Library GetHashCodeReturns the hash code for this instance. (Overrides ValueTypeGetHashCode.)
Public method Supported by the XNA Framework Supported by Portable Class Library GetTypeGets the Type of the current instance. (Inherited from Object.)
Public method Supported by the XNA Framework GetTypeCodeReturns the TypeCode for value type Decimal.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library MultiplyMultiplies two specified Decimal values.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library NegateReturns the result of multiplying the specified Decimal value by negative one.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Parse(String)Converts the string representation of a number to its Decimal equivalent.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Parse(String, NumberStyles)Converts the string representation of a number in a specified style to its Decimal equivalent.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Parse(String, IFormatProvider)Converts the string representation of a number to its Decimal equivalent using the specified culture-specific format information.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Parse(String, NumberStyles, IFormatProvider)Converts the string representation of a number to its Decimal equivalent using the specified style and culture-specific format.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library RemainderComputes the remainder after dividing two Decimal values.
Public method Static member Round(Decimal)Rounds a decimal value to the nearest integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Round(Decimal, Int32)Rounds a Decimal value to a specified number of decimal places.
Public method Static member Round(Decimal, MidpointRounding)Rounds a decimal value to the nearest integer. A parameter specifies how to round the value if it is midway between two other numbers.
Public method Static member Round(Decimal, Int32, MidpointRounding)Rounds a decimal value to a specified precision. A parameter specifies how to round the value if it is midway between two other numbers.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library SubtractSubtracts one specified Decimal value from another.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToByteConverts the value of the specified Decimal to the equivalent 8-bit unsigned integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToDoubleConverts the value of the specified Decimal to the equivalent double-precision floating-point number.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToInt16Converts the value of the specified Decimal to the equivalent 16-bit signed integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToInt32Converts the value of the specified Decimal to the equivalent 32-bit signed integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToInt64Converts the value of the specified Decimal to the equivalent 64-bit signed integer.
Public method Static member ToOACurrencyConverts the specified Decimal value to the equivalent OLE Automation Currency value, which is contained in a 64-bit signed integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToSByteConverts the value of the specified Decimal to the equivalent 8-bit signed integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToSingleConverts the value of the specified Decimal to the equivalent single-precision floating-point number.
Public method Supported by the XNA Framework Supported by Portable Class Library ToStringConverts the numeric value of this instance to its equivalent string representation. (Overrides ValueTypeToString.)
Public method Supported by the XNA Framework Supported by Portable Class Library ToString(IFormatProvider)Converts the numeric value of this instance to its equivalent string representation using the specified culture-specific format information.
Public method Supported by the XNA Framework Supported by Portable Class Library ToString(String)Converts the numeric value of this instance to its equivalent string representation, using the specified format.
Public method Supported by the XNA Framework Supported by Portable Class Library ToString(String, IFormatProvider)Converts the numeric value of this instance to its equivalent string representation using the specified format and culture-specific format information.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToUInt16Converts the value of the specified Decimal to the equivalent 16-bit unsigned integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToUInt32Converts the value of the specified Decimal to the equivalent 32-bit unsigned integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToUInt64Converts the value of the specified Decimal to the equivalent 64-bit unsigned integer.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library TruncateReturns the integral digits of the specified Decimal; any fractional digits are discarded.
Public method Static member Supported by Portable Class Library TryParse(String, Decimal)Converts the string representation of a number to its Decimal equivalent. A return value indicates whether the conversion succeeded or failed.
Public method Static member Supported by Portable Class Library TryParse(String, NumberStyles, IFormatProvider, Decimal)Converts the string representation of a number to its Decimal equivalent using the specified style and culture-specific format. A return value indicates whether the conversion succeeded or failed.
Top
Operators
  NameDescription
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library AdditionAdds two specified Decimal values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library DecrementDecrements the Decimal operand by one.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library DivisionDivides two specified Decimal values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library EqualityReturns a value that indicates whether two Decimal values are equal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to UInt16)Defines an explicit conversion of a Decimal to a 16-bit unsigned integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Int16)Defines an explicit conversion of a Decimal to a 16-bit signed integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to SByte)Defines an explicit conversion of a Decimal to an 8-bit signed integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to UInt32)Defines an explicit conversion of a Decimal to a 32-bit unsigned integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Int32)Defines an explicit conversion of a Decimal to a 32-bit signed integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Single)Defines an explicit conversion of a Decimal to a single-precision floating-point number.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Double)Defines an explicit conversion of a Decimal to a double-precision floating-point number.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to UInt64)Defines an explicit conversion of a Decimal to a 64-bit unsigned integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Byte)Defines an explicit conversion of a Decimal to an 8-bit unsigned integer.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Decimal to Int64)Defines an explicit conversion of a Decimal to a 64-bit signed integer.
Public operator Static member Supported by Portable Class Library (Decimal to Char)Defines an explicit conversion of a Decimal to a Unicode character.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Double to Decimal)Defines an explicit conversion of a double-precision floating-point number to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Single to Decimal)Defines an explicit conversion of a single-precision floating-point number to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library GreaterThanReturns a value indicating whether a specified Decimal is greater than another specified Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library GreaterThanOrEqualReturns a value indicating whether a specified Decimal is greater than or equal to another specified Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Byte to Decimal)Defines an explicit conversion of an 8-bit unsigned integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Char to Decimal)Defines an explicit conversion of a Unicode character to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Int16 to Decimal)Defines an explicit conversion of a 16-bit signed integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Int32 to Decimal)Defines an explicit conversion of a 32-bit signed integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (Int64 to Decimal)Defines an explicit conversion of a 64-bit signed integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (SByte to Decimal)Defines an explicit conversion of an 8-bit signed integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (UInt16 to Decimal)Defines an explicit conversion of a 16-bit unsigned integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (UInt32 to Decimal)Defines an explicit conversion of a 32-bit unsigned integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library (UInt64 to Decimal)Defines an explicit conversion of a 64-bit unsigned integer to a Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library IncrementIncrements the Decimal operand by 1.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library InequalityReturns a value that indicates whether two Decimal objects have different values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library LessThanReturns a value indicating whether a specified Decimal is less than another specified Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library LessThanOrEqualReturns a value indicating whether a specified Decimal is less than or equal to another specified Decimal.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library ModulusReturns the remainder resulting from dividing two specified Decimal values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library MultiplyMultiplies two specified Decimal values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library SubtractionSubtracts two specified Decimal values.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library UnaryNegationNegates the value of the specified Decimal operand.
Public operator Static member Supported by the XNA Framework Supported by Portable Class Library UnaryPlusReturns the value of the Decimal operand (the sign of the operand is unchanged).
Top
Fields
  NameDescription
Public field Static member Supported by the XNA Framework Supported by Portable Class Library MaxValueRepresents the largest possible value of Decimal. This field is constant and read-only.
Public field Static member Supported by the XNA Framework Supported by Portable Class Library MinusOneRepresents the number negative one (-1).
Public field Static member Supported by the XNA Framework Supported by Portable Class Library MinValueRepresents the smallest possible value of Decimal. This field is constant and read-only.
Public field Static member Supported by the XNA Framework Supported by Portable Class Library OneRepresents the number one (1).
Public field Static member Supported by the XNA Framework Supported by Portable Class Library ZeroRepresents the number zero (0).
Top
Explicit Interface Implementations
  NameDescription
Explicit interface implemetation Private method Supported by Portable Class Library IComparableCompareToCompares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToBooleanInfrastructure. For a description of this member, see IConvertibleToBoolean.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToByteInfrastructure. For a description of this member, see IConvertibleToByte.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToCharInfrastructure. This conversion is not supported. Attempting to use this method throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToDateTimeInfrastructure. This conversion is not supported. Attempting to use this method throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToDecimalInfrastructure. For a description of this member, see IConvertibleToDecimal.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToDoubleInfrastructure. For a description of this member, see IConvertibleToDouble.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToInt16Infrastructure. For a description of this member, see IConvertibleToInt16.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToInt32Infrastructure. For a description of this member, see IConvertibleToInt32.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToInt64Infrastructure. For a description of this member, see IConvertibleToInt64.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToSByteInfrastructure. For a description of this member, see IConvertibleToSByte.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToSingleInfrastructure. For a description of this member, see IConvertibleToSingle.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToTypeInfrastructure. For a description of this member, see IConvertibleToType.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToUInt16Infrastructure. For a description of this member, see IConvertibleToUInt16.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToUInt32Infrastructure. For a description of this member, see IConvertibleToInt32.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertibleToUInt64Infrastructure. For a description of this member, see IConvertibleToInt64.
Explicit interface implemetation Private method IDeserializationCallbackOnDeserializationInfrastructure. Runs when the deserialization of an object has been completed.
Top
Remarks

The Decimal value type represents decimal numbers ranging from positive 79,228,162,514,264,337,593,543,950,335 to negative 79,228,162,514,264,337,593,543,950,335. The Decimal value type is appropriate for financial calculations that require large numbers of significant integral and fractional digits and no round-off errors. The Decimal type does not eliminate the need for rounding. Rather, it minimizes errors due to rounding. For example, the following code produces a result of 0.9999999999999999999999999999 instead of 1.

Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor)   
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 0.9999999999999999999999999999 to the console
Console.WriteLine(dividend/divisor * divisor);   
using namespace System;

void main()
{
   Decimal dividend = Decimal::One;
   Decimal divisor = 3;
   // The following displays 0.9999999999999999999999999999 to the console
   Console::WriteLine(dividend/divisor * divisor);   
}

When the result of the division and multiplication is passed to the Round method, the result suffers no loss of precision, as the following code shows.

Dim dividend As Decimal = Decimal.One
Dim divisor As Decimal = 3
' The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2))   
decimal dividend = Decimal.One;
decimal divisor = 3;
// The following displays 1.00 to the console
Console.WriteLine(Math.Round(dividend/divisor * divisor, 2));   
using namespace System;


void main()
{
   Decimal dividend = Decimal::One;
   Decimal divisor = 3;
   // The following displays 1.00 to the console
   Console::WriteLine(Math::Round(dividend/divisor * divisor, 2));   	
}

A decimal number is a floating-point value that consists of a sign, a numeric value where each digit in the value ranges from 0 to 9, and a scaling factor that indicates the position of a floating decimal point that separates the integral and fractional parts of the numeric value.

The binary representation of a Decimal value consists of a 1-bit sign, a 96-bit integer number, and a scaling factor used to divide the 96-bit integer and specify what portion of it is a decimal fraction. The scaling factor is implicitly the number 10, raised to an exponent ranging from 0 to 28. Therefore, the binary representation of a Decimal value the form, ((-296 to 296) / 10(0 to 28)), where -(296-1) is equal to MinValue, and 296-1 is equal to MaxValue. For more information about the binary representation of Decimal values and an example, see the Decimal(Int32) constructor and the GetBits method.

The scaling factor also preserves any trailing zeros in a Decimal number. Trailing zeros do not affect the value of a Decimal number in arithmetic or comparison operations. However, trailing zeros might be revealed by the ToString method if an appropriate format string is applied.

Conversion Considerations

This type provides methods that convert Decimal values to and from SByte, Int16, Int32, Int64, Byte, UInt16, UInt32, and UInt64 values. Conversions from these integral types to Decimal are widening conversions that never lose information or throw exceptions.

Conversions from Decimal to any of the integral types are narrowing conversions that round the Decimal value to the nearest integer value toward zero. Some languages, such as C#, also support the conversion of Decimal values to Char values. If the result of these conversions cannot be represented in the destination type, an OverflowException exception is thrown.

The Decimal type also provides methods that convert Decimal values to and from Single and Double values. Conversions from Decimal to Single or Double are narrowing conversions that might lose precision but not information about the magnitude of the converted value. The conversion does not throw an exception.

Conversions from Single or Double to Decimal throw an OverflowException exception if the result of the conversion cannot be represented as a Decimal.

Performing Operations on Decimal Values

The Decimal type supports standard mathematical operations such as addition, subtraction, division, multiplication, and unary negation. You can also work directly with the binary representation of a Decimal value by calling the GetBits method.

To compare two Decimal values, you can use the standard numeric comparison operators, or you can call the CompareTo or Equals method.

You can also call the members of the Math class to perform a wide range of numeric operations, including getting the absolute value of a number, determining the maximum or minimum value of two Decimal values, getting the sign of a number, and rounding a number.

Examples

The following code example demonstrates the use of Decimal.

' Keeping my fortune in Decimals to avoid the round-off errors. 
Class PiggyBank
    Protected MyFortune As Decimal 

    Public Sub AddPenny()
        MyFortune = [Decimal].Add(MyFortune, 0.01D)
    End Sub 

    Public ReadOnly Property Capacity() As Decimal 
        Get 
            Return [Decimal].MaxValue
        End Get 
    End Property 

    Public ReadOnly Property Dollars() As Decimal 
        Get 
            Return [Decimal].Floor(MyFortune)
        End Get 
    End Property 

    Public ReadOnly Property Cents() As Decimal 
        Get 
            Return [Decimal].Subtract(MyFortune, [Decimal].Floor(MyFortune))
        End Get 
    End Property 

    Public Overrides Function ToString() As String 
        Return MyFortune.ToString("C") + " in piggy bank" 
    End Function 
End Class
/// <summary> 
	/// Keeping my fortune in Decimals to avoid the round-off errors. 
	/// </summary> 
	class PiggyBank {
		protected decimal MyFortune;

		public void AddPenny() {
			MyFortune = Decimal.Add(MyFortune, .01m);
		}

		public decimal Capacity {
			get {
				return Decimal.MaxValue;
			}
		}

		public decimal Dollars {
			get {
				return Decimal.Floor(MyFortune);
			}
		}

		public decimal Cents {
			get {
				return Decimal.Subtract(MyFortune, Decimal.Floor(MyFortune));
			}
		}

		public override string ToString() {
			return MyFortune.ToString("C")+" in piggy bank";
		}
	}
/// <summary> 
   /// Keeping my fortune in Decimals to avoid the round-off errors. 
   /// </summary> 
   public ref class PiggyBank
   {
   protected:
      Decimal MyFortune;

   public:
      void AddPenny()
      {
         MyFortune = System::Decimal::Add( MyFortune, Decimal(.01) );
      }

      System::Decimal Capacity()
      {
         return MyFortune.MaxValue;
      }

      Decimal Dollars()
      {
         return Decimal::Floor( MyFortune );
      }

      Decimal Cents()
      {
         return Decimal::Subtract( MyFortune, Decimal::Floor( MyFortune ) );
      }

      virtual System::String^ ToString() override
      {
         return MyFortune.ToString("C")+" in piggy bank";
      }
   };
}
Version Information

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
Thread Safety

All members of this type are thread safe. Members that appear to modify instance state actually return a new instance initialized with the new value. As with any other type, reading and writing to a shared variable that contains an instance of this type must be protected by a lock to guarantee thread safety.

Caution noteCaution

Assigning an instance of this type is not thread safe on all hardware platforms because the binary representation of that instance might be too large to assign in a single atomic operation.