10

私の兄弟の e コマース サイトの js のビットは、誰かがチェックアウトするたびにトランザクションの合計を計算して保存します。定期的に、負の値が tracker_total_amount に保存されます。彼はその理由を突き止めようとしましたが、無意味な値を持つトランザクションの ~0.1% に対処するオーバーライドをハードコーディングすることにしました。次のようになります。

var tracker_total_amount = parseFloat(tracker.total_amount).toFixed(2);
    if(tracker_total_amount < 0){
        tracker_total_amount = 0;
    }

負の値がシステムに表示され続けています。

元の理論:

それは tracker_total_amount を文字列としてキャストするため、彼は .toFixed を使用するべきではないと思います. テストしてオーバーライドが機能するまで、この説明に非常に満足していました。ここを参照してください: http://jsfiddle.net/yXTrz/

新しい理論:

さまざまなユーザーがさまざまなバージョンの JavaScript を実行しています。一部の非常に小さなサブセットは古いバージョンの javascript を使用しており、(私のように文字列を float に変換するのではなく) 文字列として扱い続け、常に tracker_total_amount を > 0 として評価し、オーバーライドの発火を防ぎます。

質問:

古いバージョンの JavaScript はこのように動作しましたか? 一部のユーザーがまだ古いバージョンを実行している可能性はありますか? 何よりも、古いバージョンの JavaScript をシミュレートして私の理論を証明する方法はありますか?

編集:すべての重要なもの (支払いなど) は、サーバー側で計算された値に依存していることを指摘しておく必要があります。ここに示す数値は、後で Google アナリティクスに保存されたものに過ぎないため、操作することは可能ですが、結果がそれほどひどいものになることはありません。

4

3 に答える 3