2017-05-20 50 views
1

我正在写一个Python程序,它与我没写的webapp进行交互。有一些状态需要在我的程序中表示,而不是由服务器发送到(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 

但这给出了696的值在Python,而当我在节点运行以上的JavaScript,我得到的566值我已经还尝试了其他一些打包和解包格式的组合,但没有成功。

我最后的手段是从Python内部使用节点子进程执行javascript,但我宁愿避免这种情况。我该如何解决这个问题?

+0

如何蟒蛇接收数据使用? – pointerless

+0

一个websocket。虽然这并不特别相关。从技术上讲,它不直接接收浮点数,它接收一些整数并计算浮点数,所以解码正在使用的浮点数没有问题。 –

+1

我不确定你想用'struct'达到什么目的:这将重新解释浮点的位模式为整数,而不是做类似于算术运算的操作。像'int(0.73346 *(1 << 30))&1023'这样的东西能做到你想要的吗? –

回答

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

给出蟒蛇566

+0

啊,看来,javascript让你使用按位操作的方式是通过将它们投射到整数...我甚至没有考虑这一点。谢谢! –