Click here to Skip to main content
15,885,767 members
Articles / Programming Languages / C# 4.0

A Money type for the CLR

Rate me:
Please Sign up or sign in to vote.
4.90/5 (62 votes)
18 Mar 2013Ms-PL14 min read 194.2K   2.5K   138  
A convenient, high-performance money structure for the CLR which handles arithmetic operations, currency types, formatting, and careful distribution and rounding without loss.
using System;
using System.Runtime.Serialization;

namespace System
{
    [Serializable]
    public class MoneyAllocationException : Exception
    {
        private readonly Money _amountToDistribute;
        private readonly Money _distributionTotal;
        private readonly Decimal[] _distribution;

        public MoneyAllocationException(Money amountToDistribute,
                                        Money distributionTotal,
                                        Decimal[] distribution)
        {
            _amountToDistribute = amountToDistribute;
            _distribution = distribution;
            _distributionTotal = distributionTotal;
        }

        public MoneyAllocationException(Money amountToDistribute,
                                        Money distributionTotal,
                                        Decimal[] distribution,
                                        String message)
            : base(message)
        {
            _amountToDistribute = amountToDistribute;
            _distribution = distribution;
            _distributionTotal = distributionTotal;
        }

        public MoneyAllocationException(Money amountToDistribute,
                                        Money distributionTotal,
                                        Decimal[] distribution,
                                        String message,
                                        Exception inner)
            : base(message, inner)
        {
            _amountToDistribute = amountToDistribute;
            _distribution = distribution;
            _distributionTotal = distributionTotal;
        }

        protected MoneyAllocationException(SerializationInfo info,
                                           StreamingContext context)
            : base(info, context)
        {
            _amountToDistribute = (Money)info.GetValue("_amountToDistribute",
                                                       typeof(Money));
            _distributionTotal = (Money)info.GetValue("_distributionTotal",
                                                      typeof(Money));
            _distribution = (Decimal[])info.GetValue("_distribution",
                                                     typeof(Decimal[]));
        }

        public Decimal[] Distribution
        {
            get { return _distribution; }
        }

        public Money DistributionTotal
        {
            get { return _distributionTotal; }
        }

        public Money AmountToDistribute
        {
            get { return _amountToDistribute; }
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)


Written By
Architect
United States United States
I'm a software engineer with 25 years of experience in areas from game and simulation development, enterprise development, systems management, machine learning, real-time and embedded systems development and geospaitial systems development.

You can find more of my work at http://www.codeplex.com and my articles at http://vectordotnet.blogspot.com/ and http://dotnoted.spaces.live.com.

Comments and Discussions