質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

484閲覧

C++のプログラミングをしているときの質問なのですが、double型なのに、小数点以下が省略されるのはなぜか

0fg3873t38k3z3e

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2025/05/25 04:19

vector2D.hファイル

#ifndef VECTOR2D_H
#define VECTOR2D_H

class Vector2D {
public:
double x;
double y;

Vector2D(); double length();

};

#endif // VECTOR2D_H

vector2D.cppファイル

#include "vector2D.h"
#include <math.h>
#include <iostream>

using namespace std;

// コンストラクタ
Vector2D::Vector2D() :x(0.0), y(0.0) {

}

double Vector2D::length() {
double length;
length = sqrt(x * x + y * y);
return length;
}

main.cppファイル

#include <iostream>
#include "Vector2D.h"

using namespace std;

int main(int argc, char** argv) {
// 2次元ベクトルの宣言
Vector2D v;
// ベクトルのx成分、y成分の値を入力
cout << "v.x=";
cin >> v.x;
cout << "v.y=";
cin >> v.y;
cout << "v=(" << v.x << "," << v.y << ")" << endl;

cout << "vの長さ" << v.length() << endl; return 0;

}

「質問」
上記プログラムを実行して、
v.x:1.0
v.y:2.0
を入力したときに、
v=(1,2)
vの長さ2.23607
となります。
v=(1,2)の中身の1と2はdouble型なのに
なぜ、v(1.0,2.0)
とはならないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

以下の3環境で確認しました。

OSコンパイラー
Windows 11Visual Studio 2022
FreeBSD 14.2GCC 15.0.1
FreeBSD 14.2Clang 21.0.0

std::fixed << std::setprecision(n)で小数点以下の桁数nを指定します。

#include <iomanip> (中略) cout << fixed << setprecision(1);

出力

v.x=1.0 v.y=2.0 v=(1.0,2.0) vの長さ2.2

(追記)
コメントにあるように、C++20以降ならstd::formatが使えます。

#include <format> (中略) //cout << "v=(" << v.x << "," << v.y << ")" << endl; cout << format("v=({:.1f},{:.1f})", v.x, v.y) << endl;

出力

v.x=1.0 v.y=2.0 v=(1.0,2.0) vの長さ2.23607

フォーマット指定の詳細は、以下を参照してください。
https://cpprefjp.github.io/reference/format/format.html

投稿2025/05/25 04:50

編集2025/05/31 11:14
hiroki-o

総合スコア1416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0fg3873t38k3z3e

2025/05/25 05:08

解答ありがとうございます。 なぜ、fixedをつけないと v(1,2)とdouble型にはならず、 vの長さは2.23607とdouble型 とばらつきが出るのでしょうか?
hiroki-o

2025/05/25 05:35 編集

std::cout.precision()で、整数も含めた桁数のデフォルトが取れます。 fixedは、小数点以下の桁数を指定する場合に付けます。 その桁数に丸める時に四捨五入したらそうなるからです。 (coutで出力するときの話で、内部的には元の桁数で持っている)
toge_

2025/05/26 06:19 編集

特に何も指定しないとstd::defaultfloatでの表示になるので、小数点以下が0の場合は整数のように表示されますし、小数点以下が0でない場合は適当な桁数で表示されます。 std::fixedを利用すると固定小数点表示になるので、指定した小数点以下の桁数が表示されるようになります。 詳しくは以下を参考にしてください。 https://cpprefjp.github.io/reference/ios/defaultfloat.html
0fg3873t38k3z3e

2025/05/31 12:21

回答ありがとうございます。 〇〇について存じておらず、調べてみたのですがいまいち理解できませんでした。 参考サイトなどがあれば教えていただきたいです。
hiroki-o

2025/05/31 12:26

〇〇とは何ですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問