Показать сообщение отдельно
  #1 (permalink)  
Старый 16.08.2012, 12:31
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 182

Глюк с математикой
сделал функцию, которая принимает на вход размер файла и разбивает его на группы по три цифры:
function file_size_formatter (cellvalue) {
        cellvalue = cellvalue.toString().match(/\d+/);
        cellvalue = cellvalue[0].toString();
        var l = cellvalue.length;
        var z = Math.floor(l / 3);
        var i = 0;
        var re = '';
        while (i < z) {
            re += '(\\d{3})'
            i++;
        }
        re = '(\\d{0,3})' + re + '$';
        re = new RegExp(re);
        var matches = cellvalue.match(re)
        i = 1;
        cellvalue = '';
        while (i < z + 2) {
            cellvalue += matches[i] + ' ';
            i++;
        }
        return cellvalue + 'B';
    }

решил проверить, как функция обработает значения различной длины, ведь размер файла может оказаться весьма большим (да и мало ли какие числа придется вжизни встречать).
Передаваемое значение -> Результат
9999999999999998 -> 9 999 999 999 999 998
9999999999999999 -> 10 000 000 000 000 000
10000000000000001 -> 10 000 000 000 000 000
10000000000000002 -> 10 000 000 000 000 002
99999999999999999 -> 100 000 000 000 000 000
99999999999999990 -> 99 999 999 999 999 980
99999999999999998 -> 100 000 000 000 000 000
99999999999999997 -> 100 000 000 000 000 000
Числа меньше 9999999999999999 вроде нормально ведут себя.
И сервак и клиент под управлением Ubuntu. Это глюк убунты или это вообще глюк всех систем?
Ответить с цитированием