2016-08-16 5 views
2

私はゲームをしています。私は数字で問題を修正しましたが、今は新しい問題があります。値が高い場合、ローカルストレージが機能しなくなる

ユーザーが特定の番号を過ぎると、ローカルストアに追加されなくなります。 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"); 
} 

だから私は、私が代わりに$を$$使用を知っているが、私はその上のjQueryのバージョンで構築されたが、それはまさにそれのように動作していFramework7と呼ばれるフレームワークを使用するためです。

+1

9000000000000000001は[最大安全整数値](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER)よりも大きくなります(JavaScriptは9007199254740991 )。 – robertklep

答えて

3

あなたは、正確なJavascriptの最大のOG Numberタイプを使用して

+/- 9007199254740991

読むのドキュメントNumbersNumber.MAX_SAFE_INTEGER

+1

@アイスマンは、彼らが問題の根に到達していないかもしれない、downvotesを気にしないでください – Satpal

+0

私は調整するupvoteよ。 – Iceman

+0

にはその番号をバイパスする手段がありますか?なぜなら、私はそれが過去に行くことができない場合は、実際にはゲームが終わりを持っていないし、それがsuppossされているような無限のゲームをしている... –

2

であるECMAスクリプトでサポートされている数の最大値を超えています積分値は2 ^(53)-1または9007199254740991です。 ES6では、これはNumber.MAX_SAFE_INTEGER

というように定義されます。big.jsなどのライブラリを試してみると、さらに大きな数を扱うことができます。

関連する問題