【问题标题】:Write large number to JSON file将大数写入 JSON 文件
【发布时间】:2021-03-11 18:25:57
【问题描述】:

我正在尝试做一个相对简单的任务,即使用 NodeJs 将 1000000000000000000000(作为不带引号的数字)写入 json 文件。我将此数字定义为常量:

const NUM = 1000000000000000000000

如果我简单地写它,它会显示为1e+21。我尝试过的所有其他内容(大数字...)最终都将其转换为字符串。

有人可以帮忙吗?

更新

为了澄清我所追求的,请看下面的代码:

// 22 digits
const bigNum = 1000000000000000000000;
console.log(JSON.stringify(bigNum)); // Output: 1e+21

// 19 digits
const bigNum2 = 1000000000000000000;
console.log(JSON.stringify(bigNum2));  // Output: 1000000000000000000

我希望能够在第一个示例中输出 1000000000000000000000 而不是 1e+21

【问题讨论】:

标签: node.js json


【解决方案1】:

如果我简单地写它,它会输出为 1e+21。我尝试过的所有其他内容(大数字...)最终都将其转换为字符串。

JSON 在其序列化表示中始终是一个字符串。它也没有对数字大小施加任何限制,尽管您当然可能会达到用于将数据序列化为 JSON 的运行时所施加的限制:

> let num = JSON.stringify(Number.MAX_SAFE_INTEGER + 1)
undefined
> JSON.parse(num)
9007199254740992
> Number.MAX_SAFE_INTEGER + 1
9007199254740992

指数符号不会改变值,只是节省字节,更容易阅读:

> 1e+21 === 1000000000000000000000
true

【讨论】:

  • "JSON 将永远是一个字符串" OP 似乎只有常规代码,他们称之为“JSON”,而实际上不是:const NUM = 1000000000000000000000
  • 嗯。那么如何将 Number 转换为 String 呢?
  • 是的,有点不清楚。 OP 还提到了 BigInt,但这不能序列化为 JSON。我不完全确定发生了什么
猜你喜欢
  • 2019-02-07
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 2012-11-13
相关资源
最近更新 更多