es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Decimal equivocado redondeado a los primeros 2 dígitos de los montos en Python 3.7 y Django.

Que haya 3 campos en Django:

py
INPUT = models.DecimalField(max_digits=20, decimal_places=3, default=0)
RESULT = models.DecimalField(max_digits=20, decimal_places=3, default=0)
RATE = models.DecimalField(max_digits=12, decimal_places=5, default=1)

RATE siempre es Decimal(‘1.00000’).

Quiero que RESULT = INPUT * RATE y como la fuente proviene de la base de datos o de las API, utilizo:

RESULT = Decimal(INPUT) * Decimal(RATE)

No sé por qué, pero en algunos casos (≈ 2%) termino con los números que se muestran en la siguiente tabla. Hay un redondeo a las primeras 2 cifras.

¿Sabe qué podría causar eso? No veo nada en el código que pueda hacer eso y estoy perdido. Ambas columnas deberían ser iguales.

sh
RESULT INPUT
610.000 609.000
3700.000 3743.520
1200.000 1159.000
570.000 573.300
61.000 61.470
1300.000 1321.550
44.000 43.730
130.000 125.770
18.000 18.500
100.000 99.590
41.000 40.650
95.000 94.880
19.000 18.710
36.000 35.640
120.000 118.800
12.000 12.290
11.000 11.260
1.000 1.030
160.000 155.970
190.000 186.850
51.000 50.770
130.000 128.150
12.000 12.290
11.000 11.260
25.000 24.940
24.000 23.640

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el redondeo esté ocurriendo al convertir los campos INPUT y RATE en objetos Decimal. Puede intentar usar el método quantize para especificar el número de lugares decimales a los que desea redondear:

    RESULTADO = Decimal(INPUT).quantize(Decimal('0.00')) * Decimal(RATE).quantize(Decimal('0.00'))
    

Comments are closed.