gpt4 book ai didi

javascript - nodejs json.parse 保留科学记数法

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:08 25 4
gpt4 key购买 nike

任何人都可以帮我解决我面临的 JSON.parse() 问题吗?这是利用 Node.js v6.9。

基本上,我需要在数据库中存储一些数据,就像我在文件中看到的那样。虽然我已经完成了大部分工作,但我正在努力解决一些问题。

第一个问题是当我在数组中遇到科学计数法时。当我解析它时,它不会保留“e-n”,除非它大于 6。因此,结果是我得到一个存储在数组中的非科学计数值。有没有办法强制 parse() 函数保留这个?请参阅我在 Visual Studio Code 中从调试器运行的示例:

JSON.parse('[3.908e-3, -5.775e-7]');
Array[2] [0.003908, -5.775e-7]

JSON.parse('[3.908e-4, -5.775e-7]');
Array[2] [0.0003908, -5.775e-7]

JSON.parse('[3.908e-5, -5.775e-7]');
Array[2] [0.00003908, -5.775e-7]

JSON.parse('[3.908e-6, -5.775e-7]');
Array[2] [0.000003908, -5.775e-7]

JSON.parse('[3.908e-7, -5.775e-7]');
Array[2] [3.908e-7, -5.775e-7]

第二个问题是另一个格式问题。 JSON.parse 似乎不保留小数。与上面的第一个问题一样,是否可以使 JSON.parse() 完全按照给定的方式保留数字表示法?注意解析是如何去掉小数点零的。

JSON.parse('[1.0, 2.0]')
Array[2] [1, 2]

正在阅读可以作为第二个参数传递给 parse() 函数的 reviver 函数,但我对这些有点迷失。我需要编写自己的自定义函数来保留格式吗?

编辑:提供更多信息:我试图按原样获取复杂的 JSON 对象,并将整个结构存储在我的 Postgresql 数据库中。文件本身最初作为 Uint8Array 上传。然后我对其执行 toString() 操作,并对结果执行 JSON.parse 操作。因此,如果这是上传文件的原始内容,我可以这样做:

uploadedFile.toString();
"{
"someKey": {
"id": "COG32",
"control_id": "00D2FFFF0000",
"coefficients": [3.908e-3, -5.775e-7]
}
}"

那么我可以这样做:

JSON.parse(uploadedFile.toString());
{
"someKey": {
"id": "COG32",
"control_id": "00D2FFFF0000",
"coefficients": [3.00908, -5.775e-7]
}
}

我得到的文件中的一些属性包含两个科学记数法值的数组。

为了做到这一点,我将 json 字符串解析为一个对象,并能够迭代键及其所有属性,以将所有内容存储在数据库中自己的记录中。这一切都很好,除了 JSON.parse 会自动将 3.908e-3 转换为 3.003908。
我还需要重新创建这个 json 对象完全,因为它是从数据库中给我的。我知道它们是“相同”的数字。但是当涉及到比较文件(原始 json 对象和我从数据库重新创建的对象......)时,它们非常不同。.toExponential() 似乎给了我数字的指数变体,但以字符串格式。如果我要使用它,我最终会得到:

["3.908e-3", "-5.775e-7"]

当我想要的是:

[3.908e-3, -5.775e-7]

最佳答案

在 JSON 中,数据存储为 NUMBER 类型;当您写入 3.908e-4 时,它等于 0.0003908。

然后你有两个选择:

  • 将数据存储为字符串,以便保留格式(如果您不想执行计算,也可以)JSON.parse('["3.908e-3", "-5.775e-7"]');
  • 打印数据时强制采用某种格式,例如 (0.0004345).toExponential() --> 4.345e-4 或 (1).toFixed(1) --> 1.0;

关于javascript - nodejs json.parse 保留科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44935358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com