Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby 1.8.6 BigDecimal.to_f始终返回';0,0';在Solaris上_Ruby On Rails_Ruby_Solaris_Bigdecimal_Ruby Enterprise Edition - Fatal编程技术网

Ruby on rails Ruby 1.8.6 BigDecimal.to_f始终返回';0,0';在Solaris上

Ruby on rails Ruby 1.8.6 BigDecimal.to_f始终返回';0,0';在Solaris上,ruby-on-rails,ruby,solaris,bigdecimal,ruby-enterprise-edition,Ruby On Rails,Ruby,Solaris,Bigdecimal,Ruby Enterprise Edition,我遇到了一个非常奇怪的错误。我在Solaris 10上,使用Ruby Enterprise Edition(Ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])和Rails 2.3.4。我有一个很奇怪的错误。在irb中: irb(main):001:0> require 'bigdecimal' => true irb(main):002:0> b = BigDecimal.new('123') => #<

我遇到了一个非常奇怪的错误。我在Solaris 10上,使用Ruby Enterprise Edition(Ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])和Rails 2.3.4。我有一个很奇怪的错误。在irb中:

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> b = BigDecimal.new('123')
=> #<BigDecimal:834d0e8,'0.123E3',4(8)>
irb(main):003:0> b.to_s
=> "0.123E3"
irb(main):004:0> b.to_i
=> 123
irb(main):005:0> b.to_f
=> 123.0
irb(main):006:0> 
irb(main):001:0>需要“bigdecimal”
=>正确
irb(main):002:0>b=BigDecimal.new('123'))
=> #
irb(主):003:0>b.to\U.s
=>“0.123E3”
irb(主):004:0>b.to_i
=> 123
irb(主):005:0>b至
=> 123.0
irb(主要):006:0>
一切都很好!但当我启动Rails控制台并执行同样的操作时,“to_f”总是返回“0,0”

>> b = BigDecimal.new('123')
=> #<BigDecimal:9e80e14,'0.123E3',4(8)>
>> b.to_s
=> "123.0"
>> b.to_i
=> 123
>> b.to_f
=> 0,0
>b=BigDecimal.new('123'))
=> #
>>b.to_
=> "123.0"
>>b.to_i
=> 123
>>b.to\u f
=> 0,0
当我在Mac上做同样的事情时,这种情况不会发生。很奇怪!这可能是Ruby Enterprise Edition中的一个bug吗?但是如果是这样的话,为什么irb(这也是REE版本,我仔细检查过)不会出现这种情况呢。有什么想法吗

  • 约翰尼斯

    • 我不是专家,但我猜这种行为是你在德国的副作用

      显然,to_f使用了十进制分隔符的国有化版本。我怀疑,如果您将计算机的国籍设置更改为“我们”,这将改变

      编辑:

      这并不是说这有助于解决你的问题。但再多了解一些背景信息可能会:

      在irb中执行
      123.to\f
      时,实际上是在执行
      123.to\f.to\s
      (因为irb需要打印您的结果)

      使用format操作符
      %
      可以更好地为您提供显式格式:

      %5.1f”%123=>123.0

      编辑:

      经过一些挖掘,在这里发现了一些真正相关和有用的信息:


      这是Ruby社区中已知的一个问题,但它本身不会被“修复”。线程中提供了解决方法。

      我用一些信息更新了答案,这些信息应该允许您控制格式。