{ =============================================================================== Copyright (©) 2002. Rodax Software. =============================================================================== Los contenidos de este fichero son propiedad de Rodax Software titular del copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado, en su totalidad o en parte, con el permiso escrito de Rodax Software, o de acuerdo con los términos y condiciones establecidas en el acuerdo/contrato bajo el que se suministra. ----------------------------------------------------------------------------- Web: www.rodax-software.com =============================================================================== Fecha primera versión: 01-11-2002 Versión actual: 1.0.0 Fecha versión actual: 01-11-2002 =============================================================================== Modificaciones: Fecha Comentarios --------------------------------------------------------------------------- =============================================================================== } unit NumFunc; interface { Funciones numéricas } function ValidarIVA (IVA : String) : Boolean; function ValidarDto (Dto : String) : Boolean; function Redondear(x : Extended; d : Integer) : Extended; function EsNumerico(Cadena: String) : Boolean; function EsInteger(Codigo: String) : Boolean; function EsSmallInt(Codigo: String) : Boolean; function darPorcentaje(x1, x2: Double): Double; implementation uses Math, SysUtils, StrFunc; resourcestring msgRangoNoValido = '%s no es un valor válido. Debe estar en el rango de 0 a 100.'; msgDtoNoValido = '%s no es un descuento válido.'; msgIVANoValido = '%s no es un valor para el IVA válido.'; function Redondear(x : Extended; d : Integer) : Extended; // Redondear(123.456, 0) = 123.00 // Redondear(123.456, 2) = 123.46 // Redondear(123456, -3) = 123000 var n: Extended; begin n := Power(10, d); x := x * n; Result := (Int(x) + Int(Frac(x) * 2)) / n; end; function EsNumerico(Cadena: String) : Boolean; var Codigo: Integer; Valor: Double; begin Val(Cadena, Valor, Codigo); Result := (Codigo = 0) end; function EsInteger(Codigo: String) : Boolean; begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero try Result:=True; StrToInt(Codigo); except on E : EConvertError do begin Result:=False; end; end; end; function EsSmallInt(Codigo: String) : Boolean; begin //Comprueba que le numero es lo sufucientemente pequeño para ser un entero try Result:=(StrToInt(Codigo) 100) then begin Result := False; raise ERangeError.CreateFmt(msgRangoNoValido, [IVA]); end; Result := True; except on E : EConvertError do raise EConvertError.CreateFmt(msgIVANoValido, [IVA]); end; end; function validarDto (Dto : String) : Boolean; begin Result := False; if (EsCadenaVacia(Dto)) then begin Result := True; exit; end; try if (StrToFloat(Dto) < 0) or (StrToFloat(Dto) > 100) then begin Result := False; raise ERangeError.CreateFmt(msgRangoNoValido, [Dto]); end; Result := True; except on E : EConvertError do raise EConvertError.CreateFmt(msgDtoNoValido, [Dto]); end; end; function darPorcentaje(x1, x2: Double): Double; //Formula //x1 --- 100 //x2 --- X //X = (x2 * 100)/x1 var Aux: Double; begin Aux := x2 * 100; if (x1 = 0) then Aux := -1 else Aux := (Aux / x1); Result := Aux; end; end.