2011-04-02 104 views
4

如果你这样做......如何在解析JSON时防止删除小数点?

var parsed = JSON.parse('{"myNum":0.0}') ; 

然后,当你看parsed.myNum,你只会得到0。 (足够公平。)

如果你做parsed.myNum.toString(),你会得到"0"

基本上,我正在寻找一种方法将它变成字符串"0.0"

显然,在现实生活中,我不控制JSON输入,我从Web服务获取JSON ...我想使用浏览器的JSON解析器解析JSON,并且能够识别数值00.0

有没有办法做到这一点,手动阅读JSON字符串?在这种情况下,这不太可能,我需要使用浏览器的本机JSON解析器来提高速度。 (这是一个Chrome扩展的方式,没有必要担心它在其他浏览器中工作。)

+2

JavaScript没有不同的整数和浮点数类型。语言规范说强制一个没有小数的数字会丢掉小数点。使用像bensiu建议的一种自定义格式化方法。 – 2011-04-02 01:08:20

+1

它有什么不同? '0'是'0.0'是'0.00000000000' .... – 2011-04-02 01:09:24

+1

@Felix Kling:是的,我知道0在数学上与0.0相同。但是想象一下网络服务器可以提供0或0.0的情况,具体取决于它如何存储在数据库中(作为整数或浮点数)。我希望能够在JavaScript中做出这样的区分。 – callum 2011-04-02 01:13:54

回答

1
... parsed.myNum.toFixed(1) ... 

其中1是小数

编辑:parsed.myNum是数量,parsed.myNym.toFixed(1)会串

EDIT2:在这种情况下,你需要传递的值的字符串{"myNum":'0.0'}和分析计算时需要或检测小数点分隔符,解析数,并用小数点位置需要字符串时

+0

对不起,我需要*可以*如果数字是'0'或'0.0'。 (或者'0.00')。我希望能够在小数点后得到正确数字的数字,*完全像它出现在JSON字符串*中一样。 – callum 2011-04-02 01:06:47

+0

这是你最好的选择,但它仍然不会给你一个足够大的数字的小数点,以致它们通常以科学记数法显示。例如。 '1e30.toFixed(1)==='1e30'' – 2011-04-02 01:10:46

6

如果0.0未包含在JSON中的引号中(即,它是一个数字而不是字符串),那么除非您编写自己的JSON解析器,否则无法将它与0区分开来。

0

它不应该的问题,00000.000000如果你尝试JSON.parse('{"myNum":0.00001}')你会看到的{ myNum=0.0001 }的值。如果你真的需要它来保存小数,你需要保持它的字符串JSON.parse('{"myNum":"0.0"}')