FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Trabajar con decimales y formatos
Intento redondear decimales con "RoundTo" y no me funciona bien, porque redondea a partir del 6:
RoundTo(12.346,-2)=12.35. Correcto. RoundTo(12.345,-2)=12.34 y debería ser 12.35. Lo mismo me pasa con FloatToStrF(12.345,ffNumber,15,2)=12.34. ¿Podéis ayudarme? |
#2
|
|||
|
|||
Redondeo Matemático
Yo utilizo esta función ya que el redondeo del delphi funciona más o menos como tu dices, incluso un poco más raro ya que el cinco unas veces lo redondea hacia arriba y otras hacia abajo.
function Redondeo(Nro: Double; Dec: Integer): Double; var Cad, Cad1, Cad2: String; Signo, Aux: Double; begin try If Not CadenaVacia(FormatFloat('################.#########',Abs(Nro))) Then Begin If abs(Nro) = Nro Then Signo := 1 Else Signo := (-1); Aux := Abs(Nro*Power(10,Dec+1)); If scl(',',FloatToStr(Aux)) <> 0 Then Aux := StrToFloat(copy(FloatToStr(Aux),1,scl(',',FloatToStr(Aux))-1)); If Dch(FloatToStr(Aux),1) >= '5' Then Aux := Aux + 10; Aux := StrToFloat(copy(FloatToStr(Aux),1, length(FloatToStr(Aux))-1)); Redondeo := (Aux/Power(10,Dec))*signo; End Else Redondeo := 0; except Redondeo := 0; End; End; |
#3
|
|||
|
|||
¿Y algo así no funcionaría?
En entrada tenemos el número original y el 100 es para dos decimales, 1000 para 3, etc. Por otra parte... ¿existe la funciona int? ¿o es trunc? Vamos lo que quería con esa función era coger la parte entera, sin redondear, es decir int(1,1)=1 y int(1,7)=1. Un saludo |
|
|
|