0

私はjavascript-interfaceを備えたwebviewを持っています。

この Web ビュー内から、特定の JavaScript 操作を行います。

そのうちの 1 つで、Web コンテンツの要素の 1 つに onclick 属性を設定しました。(jqueryを使用)

button.attr("onclick", "Android.doStuff(".concat(stringContainingOnlyNumbers).concat(")"));

ご想像のとおり、変数 stringContainingOnlyNumbers は、数値のみを含む文字列を保持します。

Android は、私の javascript-interface のキーワードです。

ボタンをクリックすると、メソッド doStuff がインターフェイスで呼び出されます。

これまでのところすべて順調です。

しかし、保持している文字列パラメータは浮動小数点値のように見えます。

したがって、js 側では次のようになります。

1344810353

次のように私のインターフェースに出てきます:

1.34447e+09

誰かがここで私を助けて、この変換が起こる理由を説明できますか?

4

2 に答える 2

3

これは実際には変換ではなく、科学表記法を使用して 10 進数の桁数を減らしているだけです。
6 桁に丸められた 1344810353 は 1.34447e+09 で、これは 1.34447 * 10^9 です。

これは float であり、javascript は数値を文字列として連結するときに数値を短縮する傾向があります。
例を次に示します: http://jsfiddle.net/YGC8B/

数字の桁を反復処理して 1 つずつ表示することで、これを修正できます。

function getString(number) {
    var numstring = "";
    var num = number;
    while (num > 0) {
        numstring = num % 10 + numstring;
        num -= num % 10;
        num /= 10;
    }
    return numstring;
}
var number = 1344810353;
log(getString(number)); // or however your output it

実際の例を次に示します: http://jsfiddle.net/Tj5Zy/


補足:要素のonclick

属性 を使用しないことをお勧めします。これは少し非推奨です。イベントを添付することをお勧めします。 また、jQuery を使用しているため、作業は非常に簡単です。

button.bind('click',function() {
    Android.doStuff(stringContainingOnlyNumbers);
});
于 2012-08-16T15:03:23.927 に答える
1

そこで起こっているのは float への変換ではありませんが、その整数の科学的表記法を取得しています。それは連結で起こっているに違いありません。次のようなことはできませんか。

button.attr("onclick", "Android.doStuff(" + stringContainingOnlyNumbers + ")");

?

于 2012-08-16T15:01:31.293 に答える