Project

General

Profile

Feature #12161

Friendly BigDecimal#inspect

Added by printercu (Max Melentiev) almost 5 years ago. Updated about 4 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:74241]

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 5 years ago

  • Status changed from Open to Assigned
  • Assignee set to mrkn (Kenta Murata)

Updated by skalee (Sebastian Skalacki) almost 5 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 4 years ago

  • Status changed from Assigned to Closed

This is fixed in the latest master branch of ruby/bigdecimal.

Updated by printercu (Max Melentiev) about 4 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?

Also available in: Atom PDF