Class: SitemapGenerator::BigDecimal
- Inherits:
-
Object
- Object
- SitemapGenerator::BigDecimal
- Defined in:
- lib/sitemap_generator/core_ext/big_decimal.rb
Overview
Define our own class rather than modify the global class
Constant Summary collapse
- YAML_TAG =
'tag:yaml.org,2002:float'
- YAML_MAPPING =
{ 'Infinity' => '.Inf', '-Infinity' => '-.Inf', 'NaN' => '.NaN' }
- DEFAULT_STRING_FORMAT =
'F'
Instance Method Summary collapse
- #*(other) ⇒ Object
- #/(other) ⇒ Object
- #encode_with(coder) ⇒ Object
-
#initialize(num) ⇒ BigDecimal
constructor
A new instance of BigDecimal.
- #to_d ⇒ Object
- #to_s(format = DEFAULT_STRING_FORMAT) ⇒ Object
-
#to_yaml(opts = {}) ⇒ Object
This emits the number without any scientific notation.
Constructor Details
#initialize(num) ⇒ BigDecimal
Returns a new instance of BigDecimal.
19 20 21 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 19 def initialize(num) @value = BigDecimal(num) end |
Instance Method Details
#*(other) ⇒ Object
23 24 25 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 23 def *(other) other * @value end |
#/(other) ⇒ Object
27 28 29 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 27 def /(other) SitemapGenerator::BigDecimal === other ? @value / other.instance_variable_get(:@value) : @value / other end |
#encode_with(coder) ⇒ Object
44 45 46 47 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 44 def encode_with(coder) string = to_s coder.represent_scalar(nil, YAML_MAPPING[string] || string) end |
#to_d ⇒ Object
49 50 51 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 49 def to_d self end |
#to_s(format = DEFAULT_STRING_FORMAT) ⇒ Object
54 55 56 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 54 def to_s(format = DEFAULT_STRING_FORMAT) @value.to_s(format) end |
#to_yaml(opts = {}) ⇒ Object
This emits the number without any scientific notation. This is better than self.to_f.to_s since it doesn’t lose precision.
Note that reconstituting YAML floats to native floats may lose precision.
35 36 37 38 39 40 41 42 |
# File 'lib/sitemap_generator/core_ext/big_decimal.rb', line 35 def to_yaml(opts = {}) return super unless defined?(YAML::ENGINE) && YAML::ENGINE.syck? YAML.quick_emit(nil, opts) do |out| string = to_s out.scalar(YAML_TAG, YAML_MAPPING[string] || string, :plain) end end |