如何漂亮地打印十进制格式

Zyp*_*rax 2 ruby decimal pretty-print number-formatting

当我漂亮打印小数时,有没有办法更改小数的默认格式?

irb(main):521:0> pp 10.to_d / 2.5   
0.4e1
Run Code Online (Sandbox Code Playgroud)

我想将其格式化为:

irb(main):521:0> pp 10.to_d / 2.5   
4.0
Run Code Online (Sandbox Code Playgroud)

我真的不关心潜在的精度损失。当您漂亮地打印 Rails 记录时,默认格式读起来特别烦人:

<
  ...  
  id: 49391,  
  operator_id: 1,  
  tax_rate: 0.10e2,  
  sales_price: 0.1e2,  
  unit_price: 0.2e1,  
  >
Run Code Online (Sandbox Code Playgroud)

我知道我可以执行to_sto_f等操作,但漂亮打印的全部要点是,在快速浏览记录之前我不必转换记录。

Jör*_*tag 5

您可以对漂亮打印机使用的方法进行猴子修补。“正常”IRb 使用inspect,但大多数漂亮的打印机库都有自己的方法。

例如,标准库中的pp使用名为 的方法pretty_printBigDecimal不幸的是,它没有自己的实现,它只是继承了刚刚委托给 的pretty_print实现。Numericinspect

所以,我们可以自己写!

class BigDecimal
  def pretty_print(pp)
    pp.text to_s('F')
  end
end

pp 10.to_d / 2.5
# 4.0
Run Code Online (Sandbox Code Playgroud)