我有一个类似JSON的输入格式:
{
"a": 2,
"b": 0.0,
"c": "hi"
}有浮点值(始终带有小数点)和整数值(没有小数点)。我需要用Javascript解析它,使用它,然后把它写回文件(用小数点浮动)。
将其解析为经典对象很简单,但在编码时需要区分浮点数和整数。我目前使用的是这个丑陋的JS结构:
{
type: "Object",
value: {
a: {type: "Integer", value: 2},
b: {type: "Float" , value: 0},
c: {type: "String" , value: "hi"}
}
}我想简化我的结构。有没有办法区分JS数字中的浮点数和整数?就像“免费比特”之类的?或者是一些聪明的小把戏?
例如,如果我所有的输入数字都是正数,我可以将整数存储为正数,将浮点数存储为负数。但它们不是:(还有其他想法吗?
发布于 2014-08-16 23:16:15
在JavaScript中,所有数字都在内部以64位浮点形式表示。在JavaScript中根本没有float或integer这样的东西,只有Number的。所以如果你想把信息传递给另一个系统,告诉它它是float还是integer,你必须在其他地方进行编码,类似于你已经拥有的结构。
在JavaScript中,不可能检测数字文字是否用小数部分表示。你能得到的最接近的结果是测试一个数字是否有小数部分。这很容易使用模运算符(%)完成:
2 % 1 === 0
> true
2.0 % 1 === 0
> false但是,这仍然不能区分数字形式,如0.0和0
0 % 1 === 0
> true
0.0 % 1 === 0
> true如果您的数字实际上是以字符串形式存储的,那么您可以简单地测试.字符:
"0".indexOf(".") === -1
> true
"0.0".indexOf(".") === -1
> false发布于 2014-08-16 23:14:06
您可以使用parseInt或模运算符,并执行一些花哨的操作,如
if (parseInt(n) === n)
console.log("Integer");
else
console.log("Float");或
if (n % 1 === 0)
console.log("Integer");
else
console.log("Float");发布于 2014-08-18 19:31:56
我最终决定将数字作为字符串,并使用第一个字符来区分它们(i:整数,f:浮点数,s:字符串)。当访问值时,我将不得不做额外的解析。
{
"a": "i2",
"b": "f0",
"c": "shi"
}https://stackoverflow.com/questions/25341466
复制相似问题