BigDecimalを使用していると, content_tagdata-*を生成した時に文字列として出力されてしまいfloatとの違いに気づきました。

<%= content_tag :div, 'b', data: {foo: '0.1'.to_f, bar: '0.1'.to_d} %>
<%= content_tag :div, 'a', data: {foo: ['0.1'.to_f], bar: ['0.1'.to_d]} %>

で以下のように出力されます。

<div data-foo="0.1" data-bar="0.1">b</div>
<div data-foo="[0.1]" data-bar="["0.1"]">a</div>

ソースコードを確認するとERB::Util.unwrapped_html_escapeが該当処理だと思うのですが、
違いが発生する原因が特定できませんでした。
https://github.com/rails/rails/blob/861b70e92f4a1fc0e465ffcf2ee62680519c8f6f/actionview/lib/action_view/helpers/tag_helper.rb#L103

対策としてはdecimalを使う時はfloatに変換してから出力すれば問題ないのですが、
何故このような差が発生するのでしょうか?