2

次のハッシュを使用して、PDF 内にテーブルを作成しています。

percentages = {
"group one" => 0.2,
"group two" => 0.6666666666666666,
"group three" => 0.2,
"group four" => 0.03333333333333333,
"group five" => 0.03333333333333333,
"group six" => 0.06666666666666667
}

私は.transposeハッシュキーと値を呼び出しています:

[percentages.keys, percentages.values].transpose

これは期待どおりに機能しますが、小数をパーセンテージに変換する必要があります。の代わりに.2、20% を表示する必要があります。の代わりに0.06666666666666667、7% を表示する必要があります。

元のハッシュを変更したり、新しいハッシュを作成したりせずにこれを行うクリーンな方法はありますか?

4

4 に答える 4

4

あなたは試すことができます

[percentages.keys, percentages.values.map {|x| (x * 100).round.to_s + '%'}].transpose

単純に各値を取り、100 を掛けて (パーセンテージに変換)、 を呼び出しround(小数を削除するため、つまり6.666667 -> 7)、次に を呼び出しto_sて文字列に変換し、連結し'%'ます。

于 2013-10-20T22:41:06.563 に答える
3
percentages.map{|k, v| [k, "#{(v * 100).round}%"]}
于 2013-10-20T23:10:46.457 に答える
0

String.%に似た変換および丸めを行う便利な方法はformatprintfまたはsprintfカーネルで次のように使用されます。

[
  0.2,
  0.6666666666666666,
  0.2,
  0.03333333333333333,
  0.06666666666666667
].each do |f|
  puts "%.0f%%" % (f * 100)
end
# >> 20%
# >> 67%
# >> 20%
# >> 3%
# >> 7%

その時点から、探している残りの部分を簡単に作成できます。

于 2013-10-21T00:14:56.423 に答える