浮点数转换为整数的JSON stringify转换

6
我正在使用Node.js和内置的JSON对象将一个JSON对象转换为字符串。在这个对象中有:
{ 
    weight : 1.0
}

然而,当我将其转换为字符串并写入文件时,输出结果是 weight : 1。

2
不确定问题出在哪里。在JavaScript中,11.0是相同的东西。 - phenomnomnominal
3
注释是指生成的文件被用作另一个系统(Java)的输入,该系统无法将整数解析为双精度浮点数。因此,需要将输出格式设置为1.0。 - kyleED
@kyleED 你如何生成 JSON ...?? 如果你能将值用双引号括起来,或者没有其他方式 .... - Prasath K
它实际上生成了“1.0”,正如您正确识别的那样。但是现在使用的Java工具会抛出“无法将字符串转换为Double”的错误...好老的Java :) 而且我无法控制Java工具的源代码。 - kyleED
1
@kyleED 在Java工具中读取之前将其解析为浮点数。 - Prasath K
显示剩余3条评论
2个回答

4

正如在这个答案这个 MSDN 页面中所指出的:

JavaScript 中没有整数这一概念。JavaScript 中的数字是“双精度 64 位格式 IEEE 754 值”。

打开您网页浏览器的控制台,输入 1.0。您会看到打印出了 1。JavaScript 中的所有数字都是浮点数,因此您的序列化程序只选择保留必要的精度。


3
当我写JSON.stringify(0.1)时,为什么它输出的是0.1而不是0.1000000000000000055511151231257827021181583404541015625?它缺少了必要的精度。 - Janus Troelsen
那个数字无法表示为64位浮点数。一般来说,浮点数不擅长表示不能轻松写成形式3.14159... * 2^n的数字,其中“…”代表少量数字,n不是巨大的数。 - Trey Hunner

2
实际上,你的问题并不是问题,在Javascript中,1 == 1.0 == 1.00。如果您有一个浮点值,比如1.55,那么字符串化将给出相同的结果,即1.55而不是1。即使如此,如果您想要写入1.0,请将该值更改为字符串。
我的意思是将该值用双引号括起来。
{ 
    weight : "1.0"
}

1
如果JSON文件用于区分“1.0”和“1”的不同编程语言的代码,仍然存在问题。 - Alex A.
1
实际上这可能是一个问题。例如,我们有一个JSON模式生成器,它使用来自JavaScript客户端的数据。问题在于,对于1.0生成器创建类型“number”,但对于1则创建“integer”。然后当数据更改为1.2时,您会将其与整数进行验证...这将失败。 - Karel Jakubec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接