2016-08-16 2 views
2

Я работаю над игрой. Я исправил проблему с числами, но теперь у меня есть новая проблема.Localstorage перестает работать, если значение высокое.

Если пользователь прошел определенное число, он перестает добавлять его к локальному хранилищу. См. http://beefinc.tk и измените значение localstorage на 9000000000000000000, и оно перестанет позволять вам значение +1. Если вы поедете на этот номер и нажмите красную кнопку с коровой, скажите NaN, где ваши деньги. Итак, мне было интересно, как это исправить. Ниже мой код.

var money = null; 

if (localStorage.getItem('money')) { 
    var money = nFormatter(localStorage.getItem('money'), 1); 
    $$("#moneyCount").html(money); 
} else { 
    var money = localStorage.setItem('money', '0'); 
    $$("#moneyCount").html(money); 
} 

$$(".beefButton").on('click', function() { 
    var money = localStorage.getItem('money'); 
    money++; 
    localStorage.setItem('money', money); 
    $$("#moneyCount").html(nFormatter(localStorage.getItem('money'), 1)); 
    setColor('Checking For Achievements', "#ed7032", "font-weight: bold; font-size: 20px;"); 
    var money = localStorage.getItem('money'); 
    if(money === '100') { 
     setColor('Found 100', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     setColor('Displaying Entrepreneur Achievement!', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     beefinc.addNotification({ 
      message: 'Become an Entrepreneur' 
     }); 
    } 
    if(money === '1000') { 
     setColor('Found 1000', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     setColor('Displaying Business Man Achievement!', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     beefinc.addNotification({ 
      message: 'Become an Business Man' 
     }); 
    } 
    if(money === '1000000') { 
     setColor('Found 1000000', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     setColor('Displaying Millionaire Achievement!', "#ed7032", "font-weight: bold; font-size: 20px;"); 
     beefinc.addNotification({ 
      message: 'Become an Millionaire' 
     }); 
    } 

    start = clicks = frequency = 0 
     if (!start) { 
      start = new Date; 
      frequency = ++clicks/(new Date - start) * 1000; 

     } 


}); 

function nFormatter(num, digits) { 
    var si = [ 
    { value: 1E33, symbol: "D"}, 
    { value: 1E30, symbol: "N"}, 
    { value: 1E27, symbol: "O"}, 
    { value: 1E24, symbol: "Y"}, 
    { value: 1E21, symbol: "Z" }, 
    { value: 1E18, symbol: "E" }, 
    { value: 1E15, symbol: "P" }, 
    { value: 1E12, symbol: "T" }, 
    { value: 1E9, symbol: "B" }, 
    { value: 1E6, symbol: "M" }, 
    { value: 1E3, symbol: "K" } 
    ], rx = /\.0+$|(\.[0-9]*[1-9])0+$/, i; 
    for (i = 0; i < si.length; i++) { 
    if (num >= si[i].value) { 
     return (num/si[i].value).toFixed(digits).replace(rx, "$1") + si[i].symbol; 
    } 
    } 
    return num.toFixed(digits).replace(rx, "$1"); 
} 

Так что я знаю, я использую $$ вместо $, но это потому, что я использую базу под названием Framework7, которая имеет свое на встроенную в версии JQuery, но это работает точно так же, как он.

+1

9000000000000000001 больше, чем [максимальное безопасное целочисленное значение] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) Поддержка JavaScript (что составляет 9007199254740991). – robertklep

ответ

3

Вы превысили максимальное значение числа поддерживаемого ECMA Script, который

+/- 9007199254740991

Читайте документацию Numbers и Number.MAX_SAFE_INTEGER

+1

@Iceman, может быть, они не попали в корень проблемы, не унывайте нисходящие нити – Satpal

+0

Я подниму вас, чтобы настроить. – Iceman

+0

Есть ли способ обойти это число? Потому что, если я не могу пройти мимо, тогда действительно игра заканчивается не бесконечной игрой, как это предполагается ... –

2

Использование Number типа OG Javascript крупнейшим точным интегральное значение равно 2^(53) -1 или 9007199254740991. В ES6 это определяется как Number.MAX_SAFE_INTEGER

Вы можете попробовать библиотеки, такие как big.js, для обработки еще больших чисел.

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