首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储信息,如果Number为Float或Integer

存储信息,如果Number为Float或Integer
EN

Stack Overflow用户
提问于 2014-08-16 23:07:50
回答 3查看 62关注 0票数 0

我有一个类似JSON的输入格式:

代码语言:javascript
复制
{
    "a": 2,
    "b": 0.0,
    "c": "hi"
}

有浮点值(始终带有小数点)和整数值(没有小数点)。我需要用Javascript解析它,使用它,然后把它写回文件(用小数点浮动)。

将其解析为经典对象很简单,但在编码时需要区分浮点数和整数。我目前使用的是这个丑陋的JS结构:

代码语言:javascript
复制
{
    type: "Object",
    value: {
        a: {type: "Integer", value: 2},
        b: {type: "Float"  , value: 0},
        c: {type: "String" , value: "hi"}
    }
}

我想简化我的结构。有没有办法区分JS数字中的浮点数和整数?就像“免费比特”之类的?或者是一些聪明的小把戏?

例如,如果我所有的输入数字都是正数,我可以将整数存储为正数,将浮点数存储为负数。但它们不是:(还有其他想法吗?

EN

回答 3

Stack Overflow用户

发布于 2014-08-16 23:16:15

在JavaScript中,所有数字都在内部以64位浮点形式表示。在JavaScript中根本没有floatinteger这样的东西,只有Number的。所以如果你想把信息传递给另一个系统,告诉它它是float还是integer,你必须在其他地方进行编码,类似于你已经拥有的结构。

在JavaScript中,不可能检测数字文字是否用小数部分表示。你能得到的最接近的结果是测试一个数字是否有小数部分。这很容易使用模运算符(%)完成:

代码语言:javascript
复制
2 % 1 === 0
> true

2.0 % 1 === 0
> false

但是,这仍然不能区分数字形式,如0.00

代码语言:javascript
复制
0 % 1 === 0
> true

0.0 % 1 === 0
> true

如果您的数字实际上是以字符串形式存储的,那么您可以简单地测试.字符:

代码语言:javascript
复制
"0".indexOf(".") === -1
> true

"0.0".indexOf(".") === -1
> false
票数 1
EN

Stack Overflow用户

发布于 2014-08-16 23:14:06

您可以使用parseInt或模运算符,并执行一些花哨的操作,如

代码语言:javascript
复制
if (parseInt(n) === n)
    console.log("Integer");
else
    console.log("Float");

代码语言:javascript
复制
if (n % 1 === 0)
    console.log("Integer");
else
    console.log("Float");
票数 0
EN

Stack Overflow用户

发布于 2014-08-18 19:31:56

我最终决定将数字作为字符串,并使用第一个字符来区分它们(i:整数,f:浮点数,s:字符串)。当访问值时,我将不得不做额外的解析。

代码语言:javascript
复制
{
    "a": "i2",
    "b": "f0",
    "c": "shi"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25341466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档