問題を解いていて、ちょっと困った事があったので自分の備忘も含めて記事を作成しました。
🎯 背景と目的
掲示のコードでは、n * 1.5
の結果を出力していますが:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
float m = n * 1.5;
cout << m << endl;
}
これに対して 10
を入力すると、15
と表示されてしまい、意図していた 15.0
が出力されません。
小数点以下をひと桁(例:.0
)含む表記にしたいケースでは、この挙動は不十分です。
✅ 理由
- デフォルトの
cout << floatValue
は、必要な桁数のみを表示し、末尾の.0
は切り捨てられます。 - 「常に小数点以下1桁で見せたい」という目的には、出力のフォーマットを明示的に制御する必要があります。
🛠 解決策:std::fixed
+std::setprecision(1)
の導入
C++の <iomanip>
にある these マニピュレータを組み合わせると…
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
float m = n * 1.5;
cout << fixed << setprecision(1) << m << endl;
return 0;
}
fixed
:浮動小数点数を固定小数点形式で表示(科学表記ではなく通常の小数表記にする)setprecision(1)
:「小数点以下1桁」に丸めて表示
この組み合わせで、常に小数点以下1桁表示が保証されます
入力 | 出力 |
---|---|
10 | 15.0 |
1 | 1.5 |
2 | 3.0 |
💡 なぜ fixed
が必要か?
setprecision(1)
単体では「有効数字1桁」の出力に働きますが、科学表記になったり、整数部だけ表示されたりと意図しないケースが出ることもあります 。fixed
を指定することで「小数点以下の桁数表示」を明確に固定できます。
📚 サンプルコード例
ステップ1:元のコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
float m = n * 1.5;
cout << m << endl;
}
10
を入力 → 出力:15
ステップ2:改訂版
#include <bits/stdc++.h>
#include <iomanip> // 強制的に追加
using namespace std;
int main() {
int n;
cin >> n;
float m = n * 1.5;
cout << fixed << setprecision(1) << m << endl;
return 0;
}
10
を入力 → 出力:15.0 ✅2
を入力 → 出力:3.0 ✅
🎓 まとめ
- 問題点:デフォルト出力では末尾の
.0
が消える - 解決方法:
#include <iomanip>
+fixed
+setprecision(1)
- 効果:常に「小数点以下1桁」で表示され、意図したフォーマットが得られる
このフォーマット手法は、特に「小数点以下を揃えたい」「数値を見やすく表示したい」といった出力整形時に有効です。忘れたらまた、この記事を見返そうと思います!!