Ruby on rails NoMemoryError:无法使用BigDecimal.to\s方法分配内存

Ruby on rails NoMemoryError:无法使用BigDecimal.to\s方法分配内存,ruby-on-rails,ruby,out-of-memory,bigdecimal,Ruby On Rails,Ruby,Out Of Memory,Bigdecimal,我使用Ruby 2.2.3和Rails 4.2.3。我得到一个NoMemoryError:使用irb控制台中的以下代码分配内存失败: 但这个数字更大的例子有效: # Using 123e+1000000000000000000000000000000000 BigDecimal('123e+1000000000000000000000000000000000').to_s #=> "Infinity" 这里是BigDecimal:为什么不将其转换为浮点?这对我很有用: BigDecima

我使用Ruby 2.2.3Rails 4.2.3。我得到一个
NoMemoryError:使用irb控制台中的以下代码分配内存失败

但这个数字更大的例子有效:

# Using 123e+1000000000000000000000000000000000
BigDecimal('123e+1000000000000000000000000000000000').to_s
#=> "Infinity"

这里是
BigDecimal

为什么不将其转换为浮点?这对我很有用:

BigDecimal('123e+1000000000000000000').to_f
=> Infinity

为什么不把它转换成浮点数呢?这对我很有用:

BigDecimal('123e+1000000000000000000').to_f
=> Infinity

你的记忆耗尽这一事实并不奇怪。数字
123e+10000000000000000
有五分之一个零。将其表示为字符串将需要五百万个字符

在每个字符一个字节的情况下,您看到的(大致)是
10^18
字节、
10^15
KB、
10^12
MB或
10^9
GB。所以,除非你有10亿GB的内存,否则它不会工作得那么好

一旦传递给
BigDecimal
构造函数的数字传递了系统上可以表示的最大数字,它将溢出到常量
BigDecimal::INFINITY
,当转换为字符串时,它就是
INFINITY
,并且可以清楚地放入内存中:

BigDecimal('123e+1000000000000000000000000000000000') == BigDecimal::INFINITY
#=> true

你的记忆耗尽这一事实并不奇怪。数字
123e+10000000000000000
有五分之一个零。将其表示为字符串将需要五百万个字符

在每个字符一个字节的情况下,您看到的(大致)是
10^18
字节、
10^15
KB、
10^12
MB或
10^9
GB。所以,除非你有10亿GB的内存,否则它不会工作得那么好

一旦传递给
BigDecimal
构造函数的数字传递了系统上可以表示的最大数字,它将溢出到常量
BigDecimal::INFINITY
,当转换为字符串时,它就是
INFINITY
,并且可以清楚地放入内存中:

BigDecimal('123e+1000000000000000000000000000000000') == BigDecimal::INFINITY
#=> true

@你说的“应该工作”是什么意思?如果您的计算机没有足够的内存来分配该字符串,那么。。。也许很好,但事实并非如此trying@phlegx你说的“应该工作”是什么意思?如果您的计算机没有足够的内存来分配该字符串,那么。。。也许很好,这不是在尝试你的问题是什么?你的问题是什么?