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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

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

Q&A

解決済

2回答

9266閲覧

c++におけるfstreamを使用した際の、小数値読み込みについて

Daichi

総合スコア47

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

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

0グッド

0クリップ

投稿2017/01/10 10:43

編集2017/01/10 14:45

c++を使用してデータ処理をしようとしています。

読み込むデータは
0.00000077
-3.60106754
-16.07303238
のような小数の数値になっています。

今回以下のようなプログラムでこれらのデータを読み込みました。

c++

1#include <iostream> 2#include <fstream> 3#include <string> 4using namespace std; 5 6int main(int argc, char* argv[]) 7{ 8 //読み込むファイル 9 string file_name = argv[1]; 10 double data[10]={0}; 11 12 ifstream ifs; 13 ifs.open(file_name); 14 15 for(int i=0; i<10; i++) 16 { 17 ifs >> data[i]; 18 } 19 20 ifs.close(); 21 return 0; 22} 23

このようなプログラムで読み込んだところ、数値が
7.7e-07
のような形で出力されてしまいました。
このような形ではなく、データをifstreamで読み込んだ後に
読み込んだデータを元の形(0.00000077)
で、データを出力したい場合、どのようなコードを追加したらよいでしょうか??

回答の方よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

固定小数点で小数点下8桁出力する場合はstd::setprecision(8)を指定すれば良いです。

C++

1#include <iostream> 2#include <iomanip> 3 4int main() 5{ 6 double x=0.00000077; 7 std::cout << std::fixed << std::setprecision(8) << x << "\n"; 8 9 return 0; 10}

また、boost::format()を使うとprintf()チックに出力できて便利です。

投稿2017/01/10 11:02

Chironian

総合スコア23272

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

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

Daichi

2017/01/10 15:04

データをifstreamで値を読み込んだ後に、 そのまま、出力すると、7.7e-07のような形になるのですが、 これは、どのようにしたら、小数の形に戻るでしょうか??
Chironian

2017/01/10 15:12

std::cout << std::fixed << std::setprecision(8) << x << "\n"; として出力すれば、小数の形で表示されますよ。 もし、標準出力ではないところへ出力しているのでしたら、7.7e-07と表示された時の出力方法を記載下さい。
Daichi

2017/01/12 09:51

解決しました! ありがとうございます!
guest

0

どうやるんだろうと自分も疑問に思ったので「C++ 書式付き出力」で検索してみたら以下のようなページがヒットしました。
C++ の iostream フォーマット指定早見表

うーん、ややこしそうです。自分ならsprintf(char_buffer, "%.8f", f)などでいったん文字列に変換してからそれを出力するなんてコードにしてしまいそうです。

投稿2017/01/10 10:55

編集2017/01/10 10:56
KSwordOfHaste

総合スコア18392

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問