• ベストアンサー

double型を文字列で。

doubleが文字列表現したいのですが、printfで"%f"をしていしても桁が足りません。 検索で調べても桁を指定しているものが多く、汎用的ではないように見えます。 変数にセットされたdouble値をそのまま文字列で表現する方法はないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • racene
  • ベストアンサー率70% (21/30)
回答No.2

doubleも内部では2進数なので、10進数に変換して表示するときは近似値にせざるをえません。 そのため、質問者様の意図した意味で「セットされたdouble値をそのまま文字列で表現する」ことは不可能です。 どうしてもそのようなことをしたい場合は有理数ライブラリを使うとよいでしょう。 C++であればboostライブラリ等に入っていたはずです。(C言語のライブラリは申し訳有りませんが知りません)

TeijigoTeatime
質問者

お礼

デバッグウィンドウに表示されているような感じでよかったので近似値になるとは分かっていたのですが、説明が足りませんでした。申し訳ありません。 有理数ライブラリというのは初めて聞きました。boostも含めて調べてみたいと思います。 ありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

#1 に同意. 何をしたいのかさっぱりわかりません. せめて例でもあればまだ想像できるんだけど. あと, 「doubleも内部では2進数」とは限らない>#2 し, 「浮動小数点数は2^-1022~2^1023の範囲で値を格納できます」とも言い切れなかったりします>#3.

TeijigoTeatime
質問者

補足

説明が足りませんでした。 失礼しました。 他の方の意見を参考に勉強します。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

あなたの言う汎用的な、値をそのまま出力する出力関数はあなたがC言語で自分でも作成することができますよ。やってみれば色々と勉強になると思います。 組み込み系のプログラマをやっているとprintfのような関数がない場合があって自分で作成することがありますから。 でも浮動小数点数は2^-1022~2^1023の範囲で値を格納できますので、あなたのいうような汎用的な出力関数は整数部は300桁超、小数部は1000桁超になる可能性があります。 ですからあまり実用的ではないので自作する場合も大体printfに合わせた感じで作成することになります。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

すみません。言ってることがわかりません。 「double値をそのまま文字列」と「%fで精度を指定」するのと、なにが違うのでしょう? 「汎用的ではない」とは何のことですか? あと、printfのマニュアルをよく読んでください。f以外にもdoubleに対応した書式設定があります。

TeijigoTeatime
質問者

お礼

早速のレスありがとうございます。 説明が下手で申し訳ありません。 ドキュメントをよく読んでみます。

関連するQ&A

  • 文字列に含まれているダブルクォーテーション( ")を置換する

    文字列に含まれているダブルクォーテーションを除きたいのですが、これをSubstitute関数で置換しようとしてもうまくいきません。ダブルクォーテーションが文字列を指定するために使われるせいだと思うのですが、"を文字列として指定する方法はあるのでしょうか? よろしくお願いします。

  • 表示桁数をそろえた文字列を変数に格納したい

    ログファイルを、時間で検索するシェルスクリプトを作成したいと考えています。 変数searchStr に、ログから検索対象となる時間をループで生成したい。 例:「Jun 23 00:23」(※この文字列を作成したい。) 以下スクリプト作成しましたが 結果として、変数h、mが、1~9の時、searchStr は「Jun 23 0:23」や「Jun 23 0:3」になります。 時間と分の桁数が、変数が1ケタの場合、1→01としたい。 printfの%2dとか指定し、変数に入れてみたりしたのですが上手く文字列を生成することが出来ないのです。 (searchStr="Jun 23 `printf "%02d" $h` :" 等してみましたが、00が入っただけで、01とかになりませんでした。) #!/bin/bash for((h=0;h<24;h++)) do for ((m=0;m<59;m++)) do searchStr="Jun 23 "$h":"$m echo $searchStr #文字列確認 cat ログファイル | grep searchStr #ここで検索するための文字列を作成したい。 done done 良い解決方法がありましたら、ご教示お願いします。

  • DOUBLE型の16進HEX文字列変換について

    12バイトのHEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)などを をいったん、10進に変換し、DOUBLE型の変数に設定し、 数値演算を行い 再度HEX文字列(FFFFFFFFFFFFFFFFFFFFFFFF)に変換を行いたいのですが、 変換の方法がわからず困っています。 HEX関数はLONGでしかおこなえないようで・・ すみませんが、ご教授いただけると助かります。 宜しくお願いいたします。

  • Excelに、ダブルクォーテーションで始まる文字列を貼り付けると、ダブルクォーテーションが消えること

    Excelで、ダブルクォーテーションで始まる文字列をセルに貼り付けたときに ダブルクォーテーションが消えるのですが、 Excelってもともと(標凖的な動作として)そういうものですか。 (F2キーを押すなりして)編集状態にして貼り付ければ、ダブルクォーテーションのついたまま貼り付くのですが、 私はセルを選択して貼り付けただけでも大丈夫だと思っていました。 「文字列を貼り付ける」というのは、例えばテキストエディタ上にあるものを手作業でコピーして貼り付ける、ということです。 「ダブルクォーテーションで始まる文字列」と言っても、 ダブルクォーテーションが3つ以上あったときに消えるのは、最初の1組(2つ)ですね。 しかし、 "AAAA"""BBBB のような場合には、なぜか AAAA"BBBB になるのです。 (ちなみに、この文字列を、質問直前の質問内容確認の画面(IE)でコピーしてExcelに貼り付けたときは、違います。) どのような規則に基づいてダブルクォーテーションが消えるのかも疑問です。 このような仕様になっている理由はなんでしょうか。 また、Excelに文字列を貼り付けるという操作を頻繁に行うため、 できれば、編集状態にしなくても、 セルを選択して貼り付けするだけで、そのままダブルクォーテーションも貼り付いてほしいのですが、 そのためにはどうすればよいのでしょうか。 「セルの書式設定」で、表示形式を文字列にすればよいと思ったのですが、だめでした。 セルには文字列を入れるだけで、数式を入れたりしません。 (数式としては扱ってほしくない、という意味です。) Excelは2000です。

  • printfの引数指定でなぜ文字列ポインタがOK?

    C言語初心者です。現在入門的書籍の1冊目を読んで勉強中です。VBAは経験あります。 printf関数について質問です。 引数の指定で通常  printf("書式文字列", 変数で値) のようにしていしますよね。  char a = 'A';  printf("%c", a); ←ここで変数aの値の「A」を渡している と理解しています。 上の例で、書式文字列を省略し、  printf(a); だとエラーがでます。 しかし、文字列の場合  char a[] = "ABC";  printf(a); はエラーにならず、「ABC」と出力されます。 さらに、ポインタを使用して  char a[] = "ABC";  char *b = a;  printf(b); もエラーにならず、上と同様に「ABC」と出力されます。 まず、この2つの例で、エラーとならず、書式文字列が省略できているのが不思議です。 これが書式文字列を省略しているわけではないとするならば、 「printf(a)」=「printf(b)」=「printf("ABC")」ということになりますが、 「printf(a)」のaも「printf(b)」のbも"ABC"の先頭のアドレスを示しているんですよね。 ということは、printf関数の引数の指定方法は  printf(書式文字列 または 文字列の先頭アドレス, 変数) というように考えられるのですが、認識があっているでしょうか? そもそも文字列について、VBAでは文字と文字列の区別はなにも意識せずに扱えたのでやや戸惑っているのですが、C言語では文字列の場合は宣言時に  char a[] のように宣言し、あとは先頭のアドレスで文字列を使っていくという感じなのでしょうか? 初心者なもので何が理解できていないのかもよくわからない状況で、質問がわかりづらいかもわかりませんが、よろしくお願いします。

  • 01_02や02_11などの文字列から0だけを取り除きたい

    Perlを使って $number1 = '01_11_10'; $number2 = '03_01'; 上記のようないくつかの変数がありこの文字列から桁を調整している0を取り除きたいのです。 具体的には下のようになればいいのです。 $number1 = '1_11_10'; $number2 = '3_1'; なにかスマートな方法、一回の関数で置換する方法はございますか? ご教授よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 正規表現で囲まれた部分の文字列

    正規表現でダブルコーテーションで囲まれた部分の文字列 を検索したいのです。 \"([^\"])*\" とりあえずこんな感じで検索はできるのですが 問題はダブルコーテーションで囲まれた部分の エスケープ文字\の判定が上手くできません。 ([^\"]) この部分でダブルコーテーション以外の文字列、 ただし\"は除くって感じにしたいのですがどうすれば良いでしょうか。 宜しくお願いします。 正規表現のエンジンはBREGEXP.DLLです。 http://www.hi-ho.ne.jp/babaq/bregexp.html

  • 変数内のコマンドの実行コマンド文字列の表示

    変数内のコマンドの実行コマンド文字列の表示 DIG=`dig ドメイン` として変数内のコマンド実行結果を printf "$DIG\n"と表示させることはできるのですが、 実際に実行したコマンドを表示させることはできますでしょうか。 逆に DIG="dig ドメイン" として文字列をセットすればコマンド内容は表示されますが、 今度はコマンドとして実行させる方法がわかりません。 `$DIG`としてもprintf "$DIG\n"などいろいろ試しましたが わかりません。。 どなたかおわかりでしょうか

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。

  • 文字列から特定の文字を抜き出す

    こんにちは。 シェルスクリプトで文字列から特定の文字を抜き出し、 変数に入れたいのですが、うまくいきません。 申し訳ありませんが、アドバイスをお願いいたします。 文字列 $moji=aaa_bbb_ccc (文字は変動します) $a=aaa $b=bbb $c=ccc と"_"毎に変数に代入したい。 echo $moji | awk -F_ '{print $2}' で文字を標準出力に取り出すことはできるのですが、 そこから変数に代入する方法がいまいち分かりません。

専門家に質問してみよう