2016-07-24 2 views
0

Я пытаюсь добавить большое десятичное число вместе, чтобы получить 9999999999.9999999999, но вместо этого я получаю 10000000000.Добавление большого количества десятичных знаков на JavaScript

Вот код:

function add(x, y) { 

    var filterFloat = function (value) { 
     if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/ 
     .test(value)) 
     return Number(value); 
    return NaN; 
    } 

    if (typeof x == 'string') { 
    filterFloat(x); 
    console.log(x); 
    }; 
    if (typeof y == 'string') { 
    filterFloat(y); 
    console.log(y); 
    }; 

    var z = filterFloat(x) + filterFloat(y); 
    //var short = z.toFixed(4); 
    //console.log(short); 
    //return short.toString(); 
    //return z.toString(); 
    return z; 
    var zz = z.toString(); 
    return zz; 
    //console.log(typeof zz); 

} 

Вот аргумент является прошло:

add("1234567890.0987654321", "9.9"); 

Смотрите ниже скрипку:

https://jsfiddle.net/emporio/gythd5dr/

+0

Это не относится к вашему коду, если вы назначили 99999999999.999999999999 для поплавка в js, он будет приближен к 100000000000. Просто введите его в консоли хром и нажмите return. вы должны сделать больше, чтобы справиться с суммой больших чисел. Совет: например, сохраните все цифры в массиве. –

ответ

1

Это, скорее всего, floating-point precision на работе. В целом числа с плавающей запятой, рассчитанные современными процессорами, являются приблизительно правильными и имеют множество краевых случаев, подобных тем, которые вы испытываете. Это связано с конечной длиной регистров в вашем процессоре.

Если вам нужна произвольная точность, вам нужно отступить к (гораздо более медленной) библиотеке, которая ее обрабатывает (или сделайте это самостоятельно вручную).

Пример: https://github.com/MikeMcl/bignumber.js

Смежные вопросы