BigDecimal 클래스
BigDecimal 클래스
Ruby 4.0의 BigDecimal 문서 페이지에는 이 페이지에 등록된 것 외에도 실수 연산을 위한 다양한 메서드가 있어요. 여기서는 이 RDoc 페이지가 직접 다루는, JSON 직렬화를 위한 확장 메서드들을 소개할게요. BigDecimal의 기본적인 실수 연산 메서드는 별도 문서를 참고하면 돼요.
출처: Ruby 4.0 API
본문
BigDecimal#as_json 과 BigDecimal.json_create 메서드로 BigDecimal 객체를 직렬화·역직렬화할 수 있어요. Marshal 문서도 함께 보세요.
BigDecimal#as_json 메서드는 self를 직렬화해, self를 나타내는 2-요소 해시를 돌려줘요:
require 'json/add/bigdecimal'
x = BigDecimal(2).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
y = BigDecimal(2.0, 4).as_json # => {"json_class"=>"BigDecimal", "b"=>"36:0.2e1"}
z = BigDecimal(Complex(2, 0)).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
JSON.create 메서드는 그런 해시를 역직렬화해 BigDecimal 객체를 돌려줘요:
BigDecimal.json_create(x) # => 0.2e1
BigDecimal.json_create(y) # => 0.2e1
BigDecimal.json_create(z) # => 0.2e1
Class Methods
json_create(object)
as_json을 보세요. 해시를 받아 그 안의 'b' 값을 BigDecimal._load로 복원해 BigDecimal 객체를 돌려줘요.
# File ext/json/lib/json/add/bigdecimal.rb, line 13
def self.json_create(object)
BigDecimal._load object['b']
end
Public Instance Methods
as_json(*)
self를 직렬화해, self를 나타내는 해시를 돌려줘요.
# File ext/json/lib/json/add/bigdecimal.rb, line 35
def as_json(*)
{
JSON.create_id => self.class.name,
'b' => _dump.force_encoding(Encoding::UTF_8),
}
end
to_json(*args)
self를 나타내는 JSON 문자열을 돌려줘요.
require 'json/add/bigdecimal'
puts BigDecimal(2).to_json
puts BigDecimal(2.0, 4).to_json
puts BigDecimal(Complex(2, 0)).to_json
출력:
{"json_class":"BigDecimal","b":"27:0.2e1"}
{"json_class":"BigDecimal","b":"36:0.2e1"}
{"json_class":"BigDecimal","b":"27:0.2e1"}