public static class Program
const decimal pow1012 = 0.000000000001M;
public static void Main()
var NumDecimalesImporte = 2;
var TipoCambio = 20.433600M;
var NumDecimalesTipoCambio = 0;
var TipoCambioUSD = 20.433600M;
var CantidadAduana = 10.00M;
var NumDecimalesCantidad = 2;
var ValorUnitarioAduana = 16.40M;
var NumDecimalesValorUnitario = 2;
Console.WriteLine("Vlidacion limites 205" + Environment.NewLine);
Console.WriteLine(GetLowerLimitNoIdentification(Importe, TipoCambio, TipoCambioUSD, 2));
Console.WriteLine(GetUpperLimitNoIdentification(Importe, TipoCambio, TipoCambioUSD, 2));
Console.WriteLine(Environment.NewLine);
Console.WriteLine("validacion limites 216"+ Environment.NewLine);
Console.WriteLine(GetLowerLimit(CantidadAduana, ValorUnitarioAduana, 2));
Console.WriteLine(GetUpperLimit(CantidadAduana, ValorUnitarioAduana, 2));
public static decimal GetLowerLimit(decimal Amount, decimal ValorUnitario, int decimalNumberCoin)
return ((Amount - ((decimal)Math.Pow(10, -(GetNumberdecimal(Amount.ToString())))) / 2) * (ValorUnitario -
(((decimal)Math.Pow(10, -(GetNumberdecimal(ValorUnitario.ToString()))))) / 2)).TruncateDecimals(decimalNumberCoin);
public static decimal GetUpperLimit(decimal quantity, decimal ValorUnitario, int decimalNumberCoin)
return RoundUp(((quantity + (((decimal)Math.Pow(10, -(GetNumberdecimal(quantity.ToString())))) / 2) - pow1012)
* (ValorUnitario + (((decimal)Math.Pow(10, -(GetNumberdecimal(ValorUnitario.ToString())))) / 2) - pow1012)), decimalNumberCoin);
public static decimal GetLowerLimitNoIdentification(decimal importe, decimal tipoCambio, decimal tipoCambioUSA, int decimalNumberCoin)
decimal pow2 = (decimal)Math.Pow(10, -GetNumberdecimal(tipoCambio.ToString()));
return ((importe - ((decimal)Math.Pow(10, -GetNumberdecimal(importe.ToString())) / 2)) * (tipoCambio - (pow2 / 2)) / (tipoCambioUSA + ((pow2 / 2) - pow1012))).TruncateDecimals(decimalNumberCoin);
public static decimal GetUpperLimitNoIdentification(decimal importe, decimal tipoCambio, decimal tipoCambioUSA, int decimalNumberCoin)
decimal pow2 = (decimal)Math.Pow(10, -GetNumberdecimal(tipoCambio.ToString()));
return RoundUp(((importe + (((decimal)Math.Pow(10, -GetNumberdecimal(importe.ToString())) / 2) - (pow1012)))
(tipoCambio + ((pow2 / 2) - (pow1012)))
(tipoCambioUSA - (pow2 / 2))), decimalNumberCoin);
public static decimal RoundUp(this decimal number, int numDecimalPlaces)
decimal multiplier = (decimal)(Math.Pow(10, numDecimalPlaces));
return (decimal)((Math.Ceiling(number * multiplier) / multiplier));
public static decimal TruncateDecimals(this decimal amount, int coinDecimals)
var pres = (decimal)Math.Pow(10, coinDecimals);
amount = Math.Truncate(amount * pres);
public static int GetNumberdecimal(string amount)
try{ return amount.Substring(amount.IndexOf(".")).Length - 1; }