Decimales

308 views
Skip to first unread message

Noe

unread,
Jul 24, 2013, 11:22:06 AM7/24/13
to publice...@googlegroups.com
Hola foro !!!

esperando me puedan ayudar de antemano les doy las gracias.

y es lo siguiente por que me salen 1 o 2 centavos de menos a comparacion de una hoja de excel que calcula lo mismo
tengo una tabla con 9560 registro y lo que pretendo saber en cuanto empleados son de tipo de nomina 1 y el importe total y cuantos de tipo de nomina 5 y su total

utilizo sum y tambien un scan sumando el campo importe y los dos me dan el mismo resultado pero cuando lo hago en la hoja de excel me da los mismos empleados pero en el importe de da 1 o 2 centavos de menos

ESPERO ME ENTIENDAN
GRACIAS........

ultraton500

unread,
Jul 24, 2013, 12:39:32 PM7/24/13
to publice...@googlegroups.com
Qué tal Noe, se me ocurre que puede tratarse de un problema de presición y redondeo. Mientras esperas la ayuda de alguien que tenga el panorama mas claro que yo podrías probar las funciones Set Decimals y Round().
Primero podrías establecer, con Set Decimals, unos cuantos decimales para verificar si el resultado indeseado está siendo redondeado. Luego puedes aplicar Round() e ir ajustando su comportamiento.
Espero te sirva de algo mi comentario.

Saludos,
Javier.

Alfonso Arce Silvestre

unread,
Jul 24, 2013, 12:57:15 PM7/24/13
to Comunidad de Visual Foxpro en Español
Hcae tiempo tenia el mismo problema, cambie el tipo de datos a Double y lo solucione de esa manera, espero te sirva a ti tambien

Edgar Acevedo

unread,
Jul 24, 2013, 1:02:44 PM7/24/13
to publice...@googlegroups.com
Hace varios años tuve un lío bastante grave con un cliente que se quejaba de que mi programa tenía graves fallas en comparación a una hoja de EXCEL que hacía los mismos cálculos pero con una diferencia final de 3 o 7 centavos.

Me tomó tiempo, pero logré demostrarle que mi aplicación en FOX era 100% precisa mientras que su *#@%&*...! en EXCEL era la imprecisa.

La razón:  Tuve que apegarme a la ley.  Según las leyes de Guatemala, el IVA (impuesto del 12%) YA SE ENCUENTRA INCLUIDO en el precio de cualquier bien o servicio. Segundo:  LA LEY del IVA dice que el impuesto se deduce del valor de CADA ARTICULO y que si el 3er. decimal es 5 o mayor, se debe redondear el 2do. decimal al siguiente centavo.  Ejemplo:
3.562  se redondea a 3.56
3.563  se redondea a 3.56
3.565  se redondea a 3.57
3.566  se redondea a 3.57
Ahora bien, si tengo que "extraer el IVA" de una factura que tenga 30 productos, POR LEY la forma correcta de hacerlo es extrayendo el IVA de CADA UNO de los productos, redondearlo en el proceso y luego sumar el IVA EXTRAÍDO.  De esta manera JAMAS, JAMAS, JAMAS, será lo mismo extraer el IVA de cada producto e irlo sumando ya redondeado que sacar el IVA de la suma final de los productos.  Esto es porque durante el redondeo hubo pérdidas y ganancias durante cada una de las aproximaciones.

Por otro lado, la hoja de EXCEL de la que tanto hacía alarde el cliente, NO HACIA aproximaciones a nivel de cada línea o registro.  Tras de eso, iba sumando todas las fracciones y las redondeaba "extrañamente" al final de la suma.

MORALEJA:  No siempre te quedarán iguales las sumas de varios decimales en FOX que en EXCEL.  En FOX podrás elegir la cantidad de decimales a considerar utilizando el SET DECIMALS TO, y podrás hacerlo de manera absoluta en cada registro.

COSA RARA:  Mi cliente tenía una funcíon en EXCEL que le traducía números a letras y la usaba para hacer cheques.  El caso es que uno de cada 50 cheques, esa función "idiota" sacaba mal los centavos del valor del cheque.  ASí que si el cheque era por  $  452.67    en la traducción ponía "Cuatrocientos cincuenta y dos con 68 centavos".  Y nunca le pudo corregir ese problema a su dichosa fórmula de EXCEL.  Eso JAMÁS sucedió con la aplicación que hicimos en VFP que nunca ha perdido ni un solo centavo al pasar de números a letras.

Salu2,


Edgar








Carlos Miguel FARIAS

unread,
Jul 24, 2013, 2:26:27 PM7/24/13
to Grupo Fox

Todos los números en excel se almacenan en punto flotante. La parte entera la maneja bien. La parte decimal en formar de fracciones de 2 .
Consecuencia, siempre te es problemas.
Toma cuatro números con dos decimales y carga los celdas de excel con formar a dos decimales, ejecuta e otra celda la suma con la función correspondiente, mostra el resultado con 10 decimales. Lo mas probable que te aparezcan dígitos entre las ultimas cifras, que seria matemáticamente imposible.
Cosa e mandinga.
Saludos: Miguel, La Pampa (RA)

Pablo Daniel Lissa

unread,
Jul 24, 2013, 3:01:21 PM7/24/13
to publice...@googlegroups.com
Hola:

Hace un par de días me pidieron que revise unos cálculos que resultaban distintos entre un SELECT de SQL y una planilla de Excel. Similar a los que nombró Edgar, había unos errores de entre 3 y 8 centavos. Quien diseñó la planilla de Excel calculaba un subtotal de 5 cifras decimales que luego usaba para volver a operar (contra valores originales de 2 cifras decimales).

La regla es que los subtotales no tengan más cifras decimales que los valores originales. Si lo tratamos en términos de cifras significativas (no decimales sino significativas), las reglas son un poco más rebuscadas:
- En suma y resta no deben superar las cifras significativas del valor con menos decimales. 3.14159 + 2.2 = 5.3
- En producto y división no deben superar las cifras significativas del valor con menos cifras significativas. 5.6356 * 2.11 = 11.9    (11.9 tiene 3 cifras significativas, como 2.11).

Saludos.

Fidel Charny

unread,
Jul 24, 2013, 5:00:14 PM7/24/13
to publice...@googlegroups.com
Para los cálculos en excel se debería utilizar la función Redondear [ =REDONDEAR(A2*B2/C2;2) ]
De otra forma, Excel muestra dos decimales si ese es el formato, pero trabaja con todos los decimales del número.


El miércoles, 24 de julio de 2013 12:22:06 UTC-3, Noe escribió:

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Jul 24, 2013, 7:21:43 PM7/24/13
to publice...@googlegroups.com
Hola solo tienes que dar un  formato a la celda para que te da los valores que necesitas.

.Cells(vrRows,21).NumberFormat = "#,##0.00" && si no quieres decimales le quitas los dos 0 después del punto


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

Noe

unread,
Jul 29, 2013, 11:12:22 AM7/29/13
to publice...@googlegroups.com

Hola a todos !!!

perdón por responder un poco tarde pero estuve enfermo........

como comentaron en la hoja de excel le di formato de numero con 2 decimales y lo pase a la tabla ejecute el programa y me dio los mismos resultados

GRACIAS.
Reply all
Reply to author
Forward
0 new messages