w3schools tag tab style page for color javascript floating-point double floating-accuracy numerical-methods

javascript - tag - title of page html



Tratando con la precisiĆ³n del flotador en Javascript (5)

Al abordar esta tarea, primero encontraré el número de decimales en x , luego redondearé y consecuencia. Yo usaría:

y.toFixed(x.toString().split(".")[1].length);

Debería convertir x en una cadena, dividirla sobre el punto decimal, encontrar la longitud de la parte derecha y, a continuación, y.toFixed(length) debería redondearse y función de esa longitud.

Esta pregunta ya tiene una respuesta aquí:

Tengo una gran cantidad de valores numéricos y en javascript. Quiero agruparlos redondeándolos al múltiplo x más cercano y convertir el resultado en una cadena.

¿Cómo puedo evitar la molesta precisión del punto flotante?

Por ejemplo:

0.2 + 0.4 = 0.6000000000000001

Dos cosas que he intentado:

>>> y = 1.23456789 >>> x = 0.2 >>> parseInt(Math.round(Math.floor(y/x))) * x; 1.2000000000000002

y:

>>> y = 1.23456789 >>> x = 0.2 >>> y - (y % x) 1.2000000000000002



Mira este enlace ... Me ayudó mucho

http://www.w3schools.com/jsref/jsref_toprecision.asp

la función toPrecision (no_of_digits_required) devuelve una cadena, así que no falsifique para usar la función parseFloat () para convertir a punto decimal de precisión req


Podrías hacer algo como esto:

> +(Math.round(y/x)*x).toFixed(15); 1.2


> var x = 0.1 > var y = 0.2 > var cf = 10 > x * y 0.020000000000000004 > (x * cf) * (y * cf) / (cf * cf) 0.02

Solución rápida:

var _cf = (function() { function _shift(x) { var parts = x.toString().split(''.''); return (parts.length < 2) ? 1 : Math.pow(10, parts[1].length); } return function() { return Array.prototype.reduce.call(arguments, function (prev, next) { return prev === undefined || next === undefined ? undefined : Math.max(prev, _shift (next)); }, -Infinity); }; })(); Math.a = function () { var f = _cf.apply(null, arguments); if(f === undefined) return undefined; function cb(x, y, i, o) { return x + f * y; } return Array.prototype.reduce.call(arguments, cb, 0) / f; }; Math.s = function (l,r) { var f = _cf(l,r); return (l * f - r * f) / f; }; Math.m = function () { var f = _cf.apply(null, arguments); function cb(x, y, i, o) { return (x*f) * (y*f) / (f * f); } return Array.prototype.reduce.call(arguments, cb, 1); }; Math.d = function (l,r) { var f = _cf(l,r); return (l * f) / (r * f); }; > Math.m(0.1, 0.2) 0.02

Puede consultar la explicación completa aquí .