有点奇怪的请求:我正在从网站解析API参数。这些参数由网站上的JavaScript处理,以向API服务器发出请求。以某种方式选择参数,将它们相加以形成另一个参数(参见参数c):
var c = 97210102839047737+67973223506388211;
[...]
var plans = new Array();
$.ajax({
url: 'info/?c='+c,
dataType: 'json',
success: function(data) {
[...]
}
});
JavaScript似乎存在大整数问题,无法正确添加它们。我想用python模拟这种行为,因为我想自动化提取和请求过程。 用javascript添加两个数字会产生:
console.log(97210102839047737+67973223506388211)
VM109:1 165183326345435970
虽然Python正确地将其添加到:
>>> print(97210102839047737+67973223506388211)
165183326345435948
有关如何在python中模拟此错误的任何建议吗?
非常感谢! :)
答案 0 :(得分:1)
本质上,JavaScript限制是所有数字以浮点表示形式存储的结果(忽略JavaScript支持的类型化数组)。
因此,如果强制Python执行添加为浮动,则可以获得类似的效果:
print(97210102839047737+67973223506388211)
print(int(float(97210102839047737)+float(67973223506388211)))
165183326345435948
165183326345435968
答案 1 :(得分:1)
JavaScript使用floating point numbers来表示其所有数字,无论它们是整数还是实际实数。所以你所看到的是精确的人工制品,它们的大小非常大。
在Python中复制它的方法是使用浮点数。你的表达可以成为:
>>> print(float(97210102839047737)+float(67973223506388211))
1.6518332634543597e+17
>>> 1.6518332634543597e+17 == float(165183326345435970)
True
这与上面的数字相同,但呈现略有不同。科学而不是一串数字。但数量是一样的。