Ruby 获取最大整数大小值

use*_*013 5 ruby java equivalent

Java 的Integer.MAX_VALUE?. 希望是土生土长的。

亚军:如果没有等效项,我需要为 Time 对象设置它,因此不是对整数 2116-02-20 硬编码最大日期,是否有适用于此的系统常量?

tad*_*man 8

整数不再有最大值,它们会自动转换为“bignum”表示:

1 << 64
# => 18446744073709551616
(1 << 64) + 1
# => 18446744073709551617
Run Code Online (Sandbox Code Playgroud)

除了内存之外真的没有限制:

1 << (1 << 16)
# => 20035299304...(thousands of digits)...05719156736
Run Code Online (Sandbox Code Playgroud)

至于时间,它同样是无限的,所以现在如果你真的想要,你可以在宇宙热死之后很好地表达时间:

Time.at(1<<128)
# => 10783118943836478994022445751222-08-06 04:04:16 -0400
Run Code Online (Sandbox Code Playgroud)

这曾经被限制在通常的 +/- 21 亿范围内,受2038 年问题的影响,但自 Ruby ~1.9 以来情况并非如此。除了从 Windows 的角度来看,我不确定 2116 的因素在哪里。

如果您想知道可以用“本机”整数表示的最大值/最小值,那么这取决于平台。32 位和 64 位二进制文​​件将有不同的限制。

  • `Integer` 曾经是 `Fixnum` 或 `Bignum`;从 Ruby 2.4 开始,它只是 `Integer`。 (4认同)
  • 我不确定这里有什么问题。为什么将时间保持在该值以下会遇到困难?这听起来更像是一个数据验证问题,而不是一个 Ruby 实现问题。除非您每秒处理数百万个时间对象,否则 bignum 的开销真的很难衡量。您更有可能在将这些序列化到数据库时遇到问题。例如,MySQL 支持 1000CE 到 9999CE 的范围。Postgres 不同,它是 4713BCE 到 5874897CE。您需要抓住链中最薄弱的环节,鉴于 Ruby 的实现,它不是 Ruby。 (4认同)