Feature #12161
closedFriendly BigDecimal#inspect
Description
Can BigDecimal's #inspect be more human-friendly? Even just #<BigDecimal:b7ea1130,1234.5678,8(12)>
instead of #<BigDecimal:b7ea1130,'0.12345678E4',8(12)>
will be much easy to read. But I think the best option is 1234.5678(#<BigDecimal:b7ea1130,8(12)>)
or something alike, which focuses on its numeric nature.
I've never used bigdecimal's address and number of significant digits. Maybe if this is rarely used information it can be avoided in #inspect at all.
With such formatting It'll be easier to recognise values in repl, debugger, and especially in test's output/failures.
Updated by mrkn (Kenta Murata) almost 9 years ago
- Status changed from Open to Assigned
- Assignee set to mrkn (Kenta Murata)
Updated by skalee (Sebastian Skalacki) over 8 years ago
I agree that BigDecimal
output is horrible.
First of all, I see no point in displaying the object's address. One rarely compares two BigDecimals by their identity. Typically #==
or#eql?
do matter, both are overriden and neither relies on #object_id
.
Although exponential form is very useful for comparing numbers by their orders of magnitude, Fixnum#inspect
often uses decimal format:
1e10.inspect # => "10000000000.0"
1e20.inspect # => "1.0e+20"
On the other hand, the BigDecimal's exponent and the number of significant digits seem to be quite important because hash equality relies on them. I'm not sure if it's sufficient reason to include them in #inspect
output though.
Updated by mrkn (Kenta Murata) about 8 years ago
- Status changed from Assigned to Closed
This is fixed in the latest master branch of ruby/bigdecimal.
Updated by printercu (Max Melentiev) almost 8 years ago
I see comment says
* BigDecimal.new("1234.5678").inspect
* #=> "0.12345678e4"
It's better than before. But still uses floating-point notation, while even Float itself is inspected as usual decimal number. Is there any intention to improve it in future?