【问题标题】:Why are exponents required for hex real numbers in Java为什么Java中的十六进制实数需要指数
【发布时间】:2016-05-21 16:50:19
【问题描述】:

例如,在 Java 中,这是一个十六进制数 0x10

0x10.2P2 是正确的十六进制双精度数。

但是为什么0x1f.2 不正确呢?为什么我们不能使用它,而 0x1f.2P1 应该给出相同的结果但它有效?

【问题讨论】:

  • 指数是强制性的

标签: java hex double decimal


【解决方案1】:

好吧,如果你真的是说为什么,我们将不得不希望负责语法的人中的一位能加入。在我看来,使指数可选不会伤害解析文字的能力,但我没有详细考虑过。我所能提供的只是Java Language Specification §3.10.2 需要它:

对于十六进制浮点字面量,至少需要一位数字(整数部分或小数部分),指数是强制性的,浮点类型后缀是可选的。指数由 ASCII 字母 p 或 P 表示,后跟一个可选的有符号整数。

【讨论】:

    【解决方案2】:

    在之前的 Stack Overflow 问题中有一些“为什么”的衡量标准:

    0xp0 prints 0.0 (Hexadecimal Floating Point Literal)

    这里:

    P in constant declaration

    @NPE 的这个“最佳答案”给出了一个理由:

    乍一看,0x 前缀似乎足以 识别十六进制浮点文字,那么为什么 Java 设计者有 选择将字母从 e 更改为 p?这与 e 是一个 有效的十六进制数字,因此保留它会导致解析歧义。 考虑:

    0x1e+2

    这是一个十六进制双精度数还是两个整数 0x1e 和 2 之和?什么时候我们 把e改成p,歧义就解决了:

    0x1p+2

    【讨论】:

      猜你喜欢
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      相关资源
      最近更新 更多