javascript - 使用 BigInt 进行数学计算时的精度问题

标签 javascript math bigint

我遇到了一个奇怪的问题...我正在使用一个 API,需要我做一些数学运算...我需要使用以下代码生成一个整数:

import time

id = long((time.time() - 14 * 24 * 60 * 60) * 1000.0 - 1420070400000L) << 22
#Output using 1578430631.86 as timestamp: 659137523812925440

问题是该示例是用 python 编写的,而我使用的是 Javascript...我尝试将其转换为 JS,如下所示:

var ts = (new Date()).getTime() / 1000;
var id = (BigInt((ts - 14 * 24 * 60 * 60) * 1000.0 - 1420070400000) << 22).toString();
//Output using 1578430631.86 as timestamp: 659137520205824000

正如您所看到的,输出有所不同,这是一个大问题。 如果有人能指出我正确的方向,那将非常感激! 提前致谢!

最佳答案

问题在于,当数字已经丢失精度时,您将其转换为 BigInt。

因此,在进行数学运算之前,请将所有内容都转换为 BigInt:

var ts = BigInt((new Date()).getTime()) / 1000n;
var id = ((ts - 14n * 24n * 60n * 60n) * 1000n - 1420070400000n << 22n).toString();
//Output using 1578430631.86 as timestamp: 659137520205824000

关于javascript - 使用 BigInt 进行数学计算时的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699381/

相关文章:

javascript - javascript 中具有两个自变量的线性回归

javascript - 如何获得 Javascript BigInt 除法的显着性和指数结果

javascript - 为什么 "true && () => {}"产生 "Uncaught SyntaxError: Malformed arrow function parameter list"?

javascript - 使用 kafka-node 创建的消费者和生产者无法连接到 kafka 的工作实例

math - 将屏幕上的点反投影回等距投影的世界

c - 基本C程序,巴比伦算法

scala - 编写 BigDecimal 计算,就好像它只是一个普通的 Scala 中的四个算术运算

postgresql - PostgreSQL 8.3 上的 Bigint

JavaScript createElement 函数

javascript - 如何删除警告 "This will upload all files from [Folder]. Only do this if you trust this site."