private static double GetBaseValue(double value, MonetaryTypes monetaryType)
 {
     if (monetaryType == MonetaryTypes.Base)
         return value;
     else
         return (value * Math.Pow(10, (int)monetaryType));
 }
 public double GetMonetaryValue(out MonetaryTypes monetaryType)
 {
     return GetMonetaryValue(Value, MonetaryTypes.Base, out monetaryType);
 }
        public static double GetMonetaryValue(double originalValue, MonetaryTypes originalMonetaryType, out MonetaryTypes idealMonetaryType)
        {
            double currentValue = 0;

            MonetaryTypes[] monetaryTypes = (MonetaryTypes[])Enum.GetValues(typeof(MonetaryTypes));

            idealMonetaryType = monetaryTypes[monetaryTypes.Length - 1];
            double actualValue = GetBaseValue(originalValue, originalMonetaryType);

            for (int i = 0; i < monetaryTypes.Length; i++)
            {
                currentValue = GetMonetaryValue(actualValue, MonetaryTypes.Base, monetaryTypes[i]);

                if (!double.IsInfinity(currentValue) /*&& currentValue >= 1d*/ && currentValue < 1000)
                {
                    idealMonetaryType = monetaryTypes[i];
                    break;
                }
            }

            return currentValue;
        }
 public MonetaryValueDisplay(double value, MonetaryTypes monetaryType)
 {
     this.value = (value * Math.Pow(10, (int)monetaryType));
 }
        public static double GetMonetaryValue(double originalValue, MonetaryTypes originalMonetaryType, MonetaryTypes desiredMonetaryType)
        {
            double actualValue = GetBaseValue(originalValue, originalMonetaryType);

            return actualValue / Math.Pow(10, (int)desiredMonetaryType);
        }