【问题标题】:Parsing a stringified number back into a number. Hexadecimal将字符串化数字解析回数字。十六进制
【发布时间】:2018-11-04 06:53:44
【问题描述】:
        var color = Math.floor(Math.random() * 16777215).toString(16);
        var hex = Number.parseInt(color, 16);
        console.log(hex);

        message.channel.send({embed: {
            color: hex, //This is the place I attempt to implement it. It doesn't accept strings.
            author: {
          name: message.author.username + "'s Profile",
          icon_url: message.author.avatarURL
        },
        description: ":white_small_square: **About:** " + message.author.bio,
        fields: [{
            name: "Client Info",
            value: ":white_small_square: **User ID** - " + "`" + message.member.id + "`" + "\n:white_small_square: **Status** - " + "`" + message.author.presence.status.toUpperCase() + "`" + " | ***Is*** " + occupation
          },
          {
            name: "Server Info",
            value: ":white_small_square: **Joined at** - "  /*+ "`" + new Date(guild.detailsOfUser(message.author.user).joinedAt).toUTCString() + "`" */+ "\n:white_small_square: **Avowed Roles** - " + ranks
          }
        ],
        timestamp: new Date(),
        footer: {
          text: message.author.username,
        }
      }
    });
    }

我环顾四周,发现一个论坛帖子,其中一群人成功地在一行中创建了一个十六进制生成器。这工作得很好,但是,我不希望它是一个字符串。我试图在该行之后解析Int,但它只是返回为“未定义”,当放入一个数字的位置时,它说它不是整数。如果有人对如何将其解析为 Int 有任何想法,请告诉我。

编辑:在我解释我为什么要关闭它之前,感谢所有帮助我尝试修复此问题的人。我只是在试验并意识到 .toString(16) 从未真正需要,并且结果数字是有效的颜色。再次感谢大家帮助我

【问题讨论】:

  • 根据文档,我看到here color 应该是一个整数值(或可能一个格式为"#00AE86" 的字符串)。我不确定你从哪里得到它是某种神秘的“十六进制”格式的要求。 0x00AE86 只是写与44678 相同的数字的一种方式。因此,您的问题中仍然缺少的关键部分是:如果删除 toString(16) 部分会发生什么?它到底怎么行不通?这是一个错误吗?是别的吗?
  • 好的,所以你是在暗示一个字符串如果它前面有一个 # 也会起作用?如果是这样,我会修改代码,希望它应该有我正在寻找的结果:)
  • 根据这个问题的答案stackoverflow.com/questions/46734519/…,它确实需要是一个十六进制值。但是,正如@SergGr 所说,它只是一个整数。即使您将 0x00AE86 放入您的 Web 控制台,它也会显示一个整数
  • 是的,根据Embed Visualizer 判断,color 必须是整数而不是字符串。字符串可能仅受 RichEmbed builder 支持。仍然“十六进制”不是整数的属性。这是表示整数的方法。 100xA 在解释器/编译器解析代码后是同一个整数。
  • @NocNit,因为16777215 实际上是0xFFFFFF,是的,该代码生成的任何值都应该在有效颜色范围内。 @Masterthias,如果您删除了 .toString(16) 部分,当您有更多关于究竟出了什么问题的详细信息时,您可能应该回到这里。作为一个简单的检查 color 实际上是问题的原因,您可以出于测试目的硬编码一些颜色,如 0x112233 并检查所有其他字段是否正常。

标签: javascript math hex discord


【解决方案1】:

您可以通过使用 noted here: 来反转该过程:

parseInt(hex, 16);

或者:

Number.parseInt(hex, 16);

这会将其改回您可以存储的int

【讨论】:

  • 或者更好,使用Number.parseInt(n,radix)
  • 这似乎有效,因为我的程序将它检测为一个数字,但是,它不会以十六进制返回,这就是 toString(16);是为了。我没有摆脱它,但它似乎绕过了。
  • @Masterthias,如果答案对您有帮助 - 将其标记为已接受。附言顺便说一句,如果您不需要字符串,为什么不删除.toString(16) 部分并使用var hex = Math.floor(Math.random() * 16777215)
  • 我正在尝试制作一个十六进制。 .toString(16) 将其作为一个返回。我认为它是整个系列中最关键和最重要的部分。顺便说一句,它不起作用,所以我还没有接受它。
  • @Masterthias,当你说“我正在尝试制作一个十六进制”同时“我不希望它是一个字符串“你到底是什么意思?在以二进制格式存储的硬件级别数字上,您可能无法更改它。那么你到底想要什么?假设生成器的“随机”部分产生整数值1234。在这种情况下,您希望获得什么价值(以及什么类型)?
猜你喜欢
  • 2015-08-02
  • 1970-01-01
  • 2011-04-08
  • 2023-03-25
  • 2017-05-29
  • 1970-01-01
  • 2014-03-19
  • 2012-01-14
相关资源
最近更新 更多