por
pobrecito hablador
el Miércoles, 03 Abril de 2013, 22:25h
(#1334556)
¿el problema de los redondeos? ¿me dices que haces las operaciones con decimales en punto flotante? de BigDecimal ni hablamos, ¿verdad?
un big NO-NO es usar floats para el parné, la pasta, la guita. se usan DECIMAL o NUMERIC o como lo llame tu base de datos, si es que es medio decente y lo implementa.
antes de responderme todo gallo, haz el favor de buscar en google sobre este tópico y luego te das unos cabezazos con la pared mientras piensas en todos los desastres esperando estallar que tienes en producción ahora mismo.
No tiene nada que ver el tipo de datos (aparte de que no se donde ha dicho que use coma flotante) con el problema del redondeo. Si usas cantidades con distintos decimales, dependiendo del orden de los cálculos, puede dar distintos resultados.
El que uses un formato de coma fija sólo implica que los redondeos los hace el sistema automáticamente y, dependiendo de que en que orden asignes los valores, hará distintos redondeos y puede dar distintos resultados.
Si importe_linea es decimal(10,2) obtendrás total factura=10.00.
Si importe_linea es decimal(10,4) obtendrás total factura=10.01.
Optando por un formato u otro has tomado la decisión de en que punto del cálculo redondeas. Exactamente igual que si hubieras usando un round con un float.
Empieza a probar calcular las cuotas por línea y sumarlas después, frente calcular la cuota sobre el total, y jugando con el número de decimales fijos en cada caso, verás los descuadres que te pueden salir aunque uses coma fija.
Los decimales fijos te evitan algunas sorpresas de los floats, ya que los decimales que ves son los que hay, no hay decimales ocultos. Con floats te puede pasar cosas raras, como por ejemplo, comparar una cantidad que aparentemente es cero y resulta que es 1e-17, o en sumas que te suma decimales ocultos.
Pero el problema de que, cuando haces redondeos el orden de las operaciones afecta al resultando, sigue existiendo, con o sin floats. Y es concretamente lo que pregunta ¿Se calcula la cuota de IVA por línea, por el total? ¿Se redondea? ¿Cuándo?
me quedo tieso
(Puntos:1, Interesante)¿me dices que haces las operaciones con decimales en punto flotante?
de BigDecimal ni hablamos, ¿verdad?
un big NO-NO es usar floats para el parné, la pasta, la guita. se usan DECIMAL o NUMERIC o como lo llame tu base de datos, si es que es medio decente y lo implementa.
antes de responderme todo gallo, haz el favor de buscar en google sobre este tópico y luego te das unos cabezazos con la pared mientras piensas en todos los desastres esperando estallar que tienes en producción ahora mismo.
No tiene nada que ver
(Puntos:2)( http://barrapunto.com/ | Última bitácora: Viernes, 29 Diciembre de 2017, 18:26h )
No tiene nada que ver el tipo de datos (aparte de que no se donde ha dicho que use coma flotante) con el problema del redondeo. Si usas cantidades con distintos decimales, dependiendo del orden de los cálculos, puede dar distintos resultados.
El que uses un formato de coma fija sólo implica que los redondeos los hace el sistema automáticamente y, dependiendo de que en que orden asignes los valores, hará distintos redondeos y puede dar distintos resultados.
Pongamos este ejemplo de dos líneas:
Suponiendo que total factura es decimal(10,2):
Si importe_linea es decimal(10,2) obtendrás total factura=10.00.
Si importe_linea es decimal(10,4) obtendrás total factura=10.01.
Optando por un formato u otro has tomado la decisión de en que punto del cálculo redondeas. Exactamente igual que si hubieras usando un round con un float.
Empieza a probar calcular las cuotas por línea y sumarlas después, frente calcular la cuota sobre el total, y jugando con el número de decimales fijos en cada caso, verás los descuadres que te pueden salir aunque uses coma fija.
Los decimales fijos te evitan algunas sorpresas de los floats, ya que los decimales que ves son los que hay, no hay decimales ocultos. Con floats te puede pasar cosas raras, como por ejemplo, comparar una cantidad que aparentemente es cero y resulta que es 1e-17, o en sumas que te suma decimales ocultos.
Pero el problema de que, cuando haces redondeos el orden de las operaciones afecta al resultando, sigue existiendo, con o sin floats. Y es concretamente lo que pregunta ¿Se calcula la cuota de IVA por línea, por el total? ¿Se redondea? ¿Cuándo?