¿Puede explicar por qué el número, por ejemplo 0.3095 se redondea a 0.309 y no a 0.310 ?
Si el número es 0.3094 redondeado es 0.309 , está bien
Si el número es 0.3096 redondeado es 0.310 , está bien
El problema es al redondear 5.
Estoy usando cálculos en tablas de datos como:
... { "data": "columndata" , render: function(data, type, row){ return parseFloat(data/1000).toFixed(3); } }, ... Donde columndata es 309.500 antes del cálculo.
Aquí está el caso de prueba:
https://jsfiddle.net/to8p2hdy/
Caso de prueba de solución de trabajo:
https://jsfiddle.net/to8p2hdy/1/
¿Por qué Math.round hace el truco pero solo parsefloat no lo hizo?
Se topó con el hecho de que algunos números decimales no tienen una representación exacta en el sistema binario. Por ejemplo, 0.1 no se puede representar en el sistema binario, lo más cercano que tenemos es 0.1000000000000000055511151231257827021181583404541015625 .
Esto es muy parecido a que "un tercio" no se puede representar en el sistema decimal porque tendría que ser 0.333333... .
Vaya a https://www.exploringbinary.com/floating-point-converter/ y descubra que 0.3095 no se puede representar con un flotante, sino que se convierte en 0.30949999999999999733546474089962430298328399658203125 , que se redondea hacia abajo en lugar de hacia arriba.