0

매우 이상한 오류가 발생했습니다. 저는 Ruby Enterprise Edition (Ruby 1.8.6 (2008-08-08 patchlevel 286) [i386-solaris2.10])을 Rails 2.3.4와 함께 사용하여 Solaris 10을 사용하고 있습니다. 나는 아주 이상한 오류가있다. 내 정보 :Ruby 1.8.6 BigDecimal.to_f는 항상 Solaris에서 '0,0'을 반환합니다.

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> 

모두 괜찮습니다. 하지만 레일즈 콘솔을 작동시켜 똑같은 일을하면 "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 

Mac에서 동일한 작업을 수행 할 때 발생하지 않습니다. 엄청 이상해! 아마도 Ruby Enterprise Edition의 버그일까요? 그렇다면 irb (REE 버전이기도 함)가 발생하지 않는 이유는 무엇입니까? 어떤 아이디어?

  • 요하네스
+0

서식을 제어 할 수있는 몇 가지 정보로 답변을 업데이트했습니다. –

답변

1

은 난 전문가는 아니지만, 내 생각이 동작 독일에서 존재의 부작용 때문이다.

분명히 to_f는 소수 구분 기호의 자국어 버전을 사용합니다. 컴퓨터의 국적 설정을 미국으로 변경하면 변경 될 것으로 생각됩니다.

편집 :이 문제를 도움이

하지. 그러나 약간의 배경 정보는 다음과 같습니다.

irb에서 123.to_f을 수행하면 실제로 irb가 결과를 출력해야하기 때문에 123.to_f.to_s을 실행 중입니다.

당신은 더 나은 형식 연산자 % 사용하여 명시 적 형식으로 제공 될 수 있습니다, 여기에 몇 가지 정말 적절하고 유용한 정보를 발견 뒷조사 후

:

"%5.1f" % 123 => 123.0

편집을

http://rubyforge.org/forum/forum.php?thread_id=32460&forum_id=723

Ruby 커뮤니티에서는 알려진 문제이지만 "수정"되지는 않습니다. 스레드에 해결 방법이 제공됩니다.