首页 > 解决方案 > 如何从文件中读取数据而不舍入精度超过 16 位的数字?

问题描述

使用fs模块的readFileSync方法从 Node.js 中的文件读取数据时,默认情况下会自动舍入超过 16 位精度的数字。

var data = fs.readFileSync(file)

data包含自动四舍五入的数字,例如:

0.91544900000000007 is rounded to 0.9154490000000001

4647.3424257097241 to 4647.342425709725

如何在不四舍五入的情况下从文件中读取数据?

标签: javascriptnode.js

解决方案


当您读取文件时,您会收到一个字符串。字符串不能四舍五入。

// temp.txt:
9154490000000000723581950185310538193807258123518235015387
// node:
fs.readFileSync('temp.txt').toString(); // not rounded

至于将字符串解析为浮点数时的舍入,有BigInt整数

// node:
let str = fs.readFileSync('temp.txt').toString();
let int = BigInt(str);

我不知道在 vanilla 节点中用于浮动的类似解决方案。您可以查看 npm 包,例如BigFloat


推荐阅读