Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Redondeo (https://www.clubdelphi.com/foros/showthread.php?t=76083)

DavidSG4 07-10-2011 17:37:33

Redondeo
 
Muy buenas y gracias por anticipado.utilizo delphi5 y paradox 7

tengo un problema con un campo de tipo numerico y es que me redondea a 2 digitos y quiero hacer que me redonde a 3 o simplemente que no haga redondeo. ejemplo:
En una tabla metales tengo el campo Niquel(Ni) al que le quiero meter el valor 22,563 y automaticamente me pone en el dbedit 22,56 e probado con mascaras y no se si es que no pongo la mascara correcta pero no me funciona

0.000
#0#.000 y mas y no lo consigo.

Saludos y gracias.

oscarac 07-10-2011 17:41:31

y en la tabla cuantos decimales tiene permitidos?

ecfisa 07-10-2011 19:02:33

Hola DavidSG4.

Crear campos calculados:
  • Doble click sobre el TTable o TQuery.
  • Click botón derecho sobre el editor de campos.
  • Elegí la opción Add all fields.
Una vez traídos los campos al editor posicionate sobre tu campo numérico 'Niquel' y en el Object Inspector, propiedad DisplayFormat escribí 0.000 si deseas 3 dígitos decimales. Si dejas el valor vacío, mostrará el número con todas sus cifras decimales.

Si realizas estos pasos y se trata de un campo numérico, tiene que mostrar el valor en el formato que le indiques. Tanto se trate de un tipo Number o de un tipo Money si su propiedad Currency esta en False.

Saludos.

Edito error
: Donde dije: 'campos calculados' es 'campos persistentes' :o

DavidSG4 10-10-2011 10:30:59

respuesta
 
Hola y gracias por tu respuesta. He realizado los cambios que me comentas pero al poner el campo calculado no me deja escribir en el dbedit. la otra respuesta que dice que cuantos campos decimales tengo permitidos en la tabla, no se como puedo cambiarlos he mirado y no encuentro esta opcion en paradox 7

Gracias de nuevo. Saludos

Cita:

Empezado por ecfisa (Mensaje 414882)
Hola DavidSG4.

Crear campos calculados:
  • Doble click sobre el TTable o TQuery.
  • Click botón derecho sobre el editor de campos.
  • Elegí la opción Add all fields.
Una vez traídos los campos al editor posicionate sobre tu campo numérico 'Niquel' y en el Object Inspector, propiedad DisplayFormat escribí 0.000 si deseas 3 dígitos decimales. Si dejas el valor vacío, mostrará el número con todas sus cifras decimales.

Si realizas estos pasos y se trata de un campo numérico, tiene que mostrar el valor en el formato que le indiques. Tanto se trate de un tipo Number o de un tipo Money si su propiedad Currency esta en False.

Saludos.


ecfisa 10-10-2011 21:49:14

Hola DavidSG4.

Mil disculpas, cometí un 'acto fallido'. Cuando escribí campos calculados, quise decir campos persistentes.
Por favor borra todos los campos calculados que creaste y seguí los pasos que te indiqué (esos son correctos :))

Un saludo y nuevamente disculpas.

DavidSG4 11-10-2011 09:23:29

voy a probar
 
Muchas gracias y de disculpas nada por favor estaria bueno, pruebo y te comento. saludos

DavidSG4 11-10-2011 17:11:59

sin solucion
 
Nada no encuentro la solucion, pongo en el displayformat 0.000 y currency=false y nada tambien he intentado redondear con una funcion en el oncalcfields y nada me lanza un error de memoria joder es una locura no entiendo... la solucion tiene que ser facil.

lo que ocurre que yo creo que hay alguna funcion por ahi escondida que me esta redondeando, pero el caso que si entro en la bbdd a editar el registro(database desktop) si que me muestra todos los digitos que yo le meti sin redondear aunque si no la edito solo me muestra 2

Gracias acepto todas las ideas posibles.

ecfisa 11-10-2011 17:57:29

Hola DavidSG4.

Si estás viendo todos los dígitos decimales con el Database Desktop, coincido con vos que algún código está modificando la presentación.
Lo que podrías hacer es poner un break (click sobre el márgen izquierdo no editable del editor) en una línea del código que estés seguro que la función aún no pudo ser invocada (al abrir la tabla por ejemplo) y utilizar Trace Into (F7) para ir línea por línea y así descubrir donde se produce el 'redondeo' no deseado.

Un saludo.

DavidSG4 11-10-2011 18:09:45

conseguido
 
no creo que sea la manera mas elegante de conseguirlo pero lo que he hecho a sido forzar la mascara en el formcreate y si que se lo traga, asi que lo que me esta tocando las narices esta antes del form create.

lo que voy hacer para hacerlo un poco mas elegante es un metodo que cualquier tabla que le pases, te coja los campos tipo float y te los de el formato con 3 decimales.

Gracias por tu ayuda.

DavidSG4 13-10-2011 12:35:06

metodo
 
Hola ecfisa.

como ya te comente estoy intentando hacer el metodo para que al pasarle una tabla me asigne la mascara que te comente. pero no soy capaz ya que cuando pongo table.fields[i].displayformat me dice que no es una propiedad del campo, en el desplegable de los atributos me sale editmask pero no el display format,

for i:=o to tabla.fields.count-1 do
begin
if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
begin
table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
end
end

a ver si me puedes ayudar gracias y un saludo

Casimiro Notevi 13-10-2011 13:25:22

Recuerda poner etiquetas al código, ejemplo:





Hay mucha diferencia de esto:
for i:=o to tabla.fields.count-1 do
begin
if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
begin
table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
end
end

a esto:

Código Delphi [-]
for i:=o to tabla.fields.count-1 do
begin
   if table.fields[i] is floatfield then // por esta condicion pasa siempre y hay campos que son string
   begin
        table.fields[i].displayformat:= mascara // este displayformat no me reconoce.
   end
end

¿no te parece? ;)

ecfisa 13-10-2011 13:33:01

Hola DavidSG4.

No uso Paradox por lo que no sé si es la mejor forma, pero de este modo funciona correctamente:
Código Delphi [-]
procedure SetDisplayFormat(DataSet: TDataSet; const Mask: string);
var
  i: Integer;
begin
  for i:= 0 to DataSet.FieldCount-1 do
    if DataSet.Fields.Fields[i].DataType = ftFloat then
      TFloatField(DataSet.Fields[i]).DisplayFormat:= Mask;
end;

Ejemplo de llamada:
Código Delphi [-]
   SetDisplayFormat(Query1, '0.00,00');

Las etiquetas... las etiquetas... ;)

Un saludo.

DavidSG4 13-10-2011 15:51:55

perfecto
 
funciona perfectamente. lo que no entiendo es porque en el dataset haces referencia 2 veces al campo fields [i]DataSet.Fields.Fields.DataType el dataset es una tabla que tiene campos porque tienes que acceder a ese segundo nivel?

mil gracias y disculpa mi ignorancia.

Cita:

Empezado por ecfisa (Mensaje 415455)
Hola DavidSG4.

No uso Paradox por lo que no sé si es la mejor forma, pero de este modo funciona correctamente:
Código Delphi [-]
procedure SetDisplayFormat(DataSet: TDataSet; const Mask: string);
var
  i: Integer;
begin
  for i:= 0 to DataSet.FieldCount-1 do
    if DataSet.Fields.Fields[i].DataType = ftFloat then
      TFloatField(DataSet.Fields[i]).DisplayFormat:= Mask;
end;

Ejemplo de llamada:
Código Delphi [-]
   SetDisplayFormat(Query1, '0.00,00');

Las etiquetas... las etiquetas... ;)

Un saludo.



La franja horaria es GMT +2. Ahora son las 14:50:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi