2017-05-20 10 views
1

私が書いていないwebappと対話するPythonプログラムを書いています。サーバーで(javascript)クライアントに送信されず、共有情報を持つクライアントとサーバーの両方で別々に計算される、私のプログラムで表現する必要のある状態がいくつかあります。PythonでJavascript浮動小数点演算を実行する

例えば、為替のようなものを行くかもしれない:

var x = getValueFromServer(); //client gets 0.73346 
x *= 1 << 30; 
result = x & 1023 

私のPythonコードが正常0.73346受けるが、私はresultの値を必要とします。 2^30の乗算の結果は、javascriptとPythonでは同じようですが、Python内でfloat値を直接マスクすることはできません。

私は

from struct import pack, unpack 
unpack('q', pack('d', 0.73346))[0] & 1023 

(上記の例値のために)試してみましたが、これは私がノードに上記のJavaScriptを実行するとしながら、私は私がきた566の値を取得するには、Pythonで696の値を与えますまた、パッキングとアンパックのフォーマットのいくつかの組み合わせを試みましたが、成功しませんでした。

私の最後の手段は、Pythonの内部からノードのサブプロセスを使用してjavascriptを実行することですが、避けたいと思います。これをどうすれば解決できますか?

+0

pythonで566を与えますか? – pointerless

+0

ウェブソケット。それは特にここでは関係ありません。技術的には浮動小数点を直接受け取っていないので、浮動小数点数を受け取って浮動小数点数を計算するので、浮動小数点のデコードには問題ありません。 –

+1

私はあなたが 'struct'で何を達成したいのかよく分かりません。それは、算術演算に似た何かをするのではなく、floatのビットパターンを整数として再解釈することです。 'int(0.73346 *(1 << 30))&1023'のようなものは何をしていますか? –

答えて

3
x = 0.73346 
x = x * (1 << 30) 
x = int(x) & 1023 

Pythonが使用するデータを受信して​​いるどのように

+0

ああ、javascriptで浮動小数点数のビット単位の演算を使えるようにするのは、それらをintにキャストすることです...私はそれについても考慮しませんでした。ありがとう! –

関連する問題