ホームページ >バックエンド開発 >C++ >C の `std::cout.precision()` が浮動小数点数の末尾のゼロを表示しないのはなぜですか?

C の `std::cout.precision()` が浮動小数点数の末尾のゼロを表示しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-10 11:41:03760ブラウズ

Why doesn't `std::cout.precision()` display trailing zeros in floating-point numbers in C  ?

末尾のゼロを表示するための std::cout.precision() の正しい使用法

C で浮動小数点数を扱う場合、 std::cout.precision() メソッドは、表示される小数点以下の桁数を制御するために重要です。ただし、場合によっては、末尾のゼロがないなど、予期しない結果が発生することがあります。

次のコードを考えてみましょう:

int main() {
  int a = 5;
  int b = 10;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

このコードは、2 つの整数を除算した結果を出力しようとします。 (5 および 10)、小数点以下 4 桁の精度。ただし、出力は予期された "0.5000" ではなく "0.5" です。

この動作の理由は、数値 'a' と 'b' が最初は整数として格納されているという事実にあります。除算を実行すると、デフォルトでは結果も整数になります。浮動小数点数を正しく表示するには、次の行に示すように、浮動小数点数を明示的に float にキャストする必要があります。

std::cout << (float)a / (float)b << "\n";

ただし、float にキャストした後でも、末尾のゼロがないままになります。ここで std::fixed マニピュレータが活躍します。末尾のゼロが表示されるようにするには、std::fixed マニピュレータを std::cout に渡す必要があります。このマニピュレータは浮動小数点値を丸め、固定小数点表記で表示します。

修正されたコードは次のとおりです。

int main() {
  int a = 5;
  int b = 10;
  std::cout << std::fixed;
  std::cout.precision(4);
  std::cout << (float)a / (float)b << "\n";
  return 0;
}

std::fixed を含めることで、出力が正しく表示されるようになりました。指定された小数点以下 4 桁の精度に従って、「0.5000」が表示されます。

以上がC の `std::cout.precision()` が浮動小数点数の末尾のゼロを表示しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。