【困っていること】
下の問題を正解するコードが思いつかず、次に奨めないので、お力添えいただければ嬉しいです。
【問題】自然数 Q が与えられます。Q 回以下の問題に答えてください。
- 実数 N、自然数 M が入力されます。N を丸めて小数第 M 位まで出力してください。また、N の小数部が小数第 M 位に満たない場合は 0 で埋めて出力してください。
なお、小数第 M 位が 5 になることはありません。
自然な丸め処理を行って出力すると正解になります。
例1)入力値
Ruby
14 20.813 1 30.813 2 40.813 3 50.813 4
出力値
Ruby
10.8 20.81 30.813 40.8130
【自分で考えた解答】
Ruby
1n = gets.to_i 2n.times do 3 x, y = gets.split(' ').map(&:to_f) 4 puts x.round(y) 5end
出力結果
0.8 0.81 0.813 0.813
正しくは、最後の出力結果は0.8130
とならないといけません。
実現したいこと
指定した小数点の桁に数値が存在しない場合は、その桁まで0を補って出力させたいです。どういったコードの書き方が考えられるでしょうか。ご教授いただきたいです。
例)
0.813
の小数点以下4桁で四捨五入してください。
0.813
は小数点以下3桁までしかないため、小数点以下4桁で四捨五入できない。 よって、出力結果は0.8130
とする。
「指定した小数点の桁に数値が存在しない場合は、その桁まで0を補って出力」この部分に関して次のようなコードを考えました。ただ、sprintfの引数の書き方がうまく思いつきませんでした。
Ruby
1if x.round(y) == x 2 sprintf("%.(y)f", x.to_f) 3 end

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/15 07:57