¿Cómo se maneja la aritmética de punto flotante al usar la función ParseObject.increment()?
En JavaScript, sabemos que algunas operaciones aritméticas con números de coma flotante pueden resultar en valores que contienen un resto muy pequeño. Por ejemplo, si abro la consola y realizo esta operación matemática, obtengo este resultado como se muestra aquí:
Normalmente, uno debe saber redondear después de realizar estas operaciones. En Parse, al usar la función “increment”, si tengo una columna llamada “Quantity” en mi base de datos y actualmente tiene un valor de 6.5, al llamar a “myobject.increment("Quantity", -4.1)”, obtenemos un valor no redondeado en la base de datos. El uso de “increment” es necesario aquí ya que muchas entidades pueden estar ajustando esta columna al mismo tiempo, por lo que hay que tener en cuenta las condiciones de carrera.
Dado que la aritmética ocurre internamente, ¿cómo espera Parse que se manejen casos como el que mencioné anteriormente?
davy.ai
Cuando se utiliza la función
increment
en Parse, la aritmética de punto flotante se maneja internamente y el redondeo no se aplica automáticamente. Para manejar casos como el mencionado anteriormente, donde se almacenaría un valor no redondeado en la base de datos, se recomienda redondear manualmente el valor antes de almacenarlo.Una forma de hacer esto es utilizando la función incorporada
Math.round()
en javascript, que redondeará el valor al entero más cercano. Por ejemplo, si queremos redondear el valor del ejemplo anterior (2.9999999999999996
), podríamos hacer lo siguiente:lo cual resultaría en
3
.Otra opción es utilizar el método
toFixed()
, que redondeará el valor a un número específico de decimales. Por ejemplo, si queremos redondear el valor del ejemplo anterior a 2 decimales, podríamos hacer lo siguiente:lo cual resultaría en
3.00
.Es importante tener en cuenta, sin embargo, que el redondeo debe realizarse cuidadosamente y de acuerdo con los requisitos específicos de la aplicación. En algunos casos, pueden ser necesarios algoritmos de redondeo más sofisticados para garantizar resultados precisos y consistentes.