Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2015年03月11日] [更新 2015年03月11日] Delphi 一般・その他
質問の文章の例 - 実際に操作した手順を書く
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro
[整理番号 - 0960]







01_質問の文章の例 - 実際に操作した手順を書く


コミュニティの場で、次のような質問がありました。この文章は質問の全文章です。
残念ながら、この文章では実際のその現象を確認することはできません。


Windows 標準の電卓のように
浮動小数点の「-3.9223669552E+06」を「2.0776330448」に変換させる
にはどうしたらよいのでしょうか。ネットで探してもうまく探せません。
どなたかご教授お願いします。


上の文章を次のように書き換えてみます。
この文章は、筆者が、質問された方が実際に操作した手順を推測して、箇条書きにしたものです。
この文章は「これこれをこうしたら、こうなった」ということが書いてあります。
Windows のバージョンも、Delphi のバージョンも書いてあります。これならば、実際に操作して確認することができます。
ただし、実際には、Windows のサービスバックや、Delphi のアップデートバージョンによって動作が異なる場合があります。

以前、質問の文章があまりにも長く、句読点がほとんどない質問がありました。箇条書きにできませんかと回答 (レス) したところ、単に読点で改行しただけの文章を書いてきた方がいました。
それは、箇条書きとは言いません。
また、箇条書きするようなことはやっていません、という返事もありました。それは、何もしていないことになってしまいます。



Windows 7 で Delphi XE を使用しています。
Windows 7 の電卓で以下の操作をします。

(1) Windows 7 の電卓を起動して、関数電卓にする
(2) -3.9223669552E+06 をコピーして電卓に貼り付ける
(3) 電卓の = キーを押すと、2.0776330448 という値になる

このように、-3.9223669552E+06 という値から、電卓と同じ値を計算するには Delphi ではどのようにすればいいのでしょうか ?



上の質問に対する具体的な解答の例です。
このコードの実行には、uses に Math が必要です。



リスト1
procedure TForm1.Button1Click(Sender: TObject);
var
  LValue  : Double;
  LManti  : Extended;
  LExtend : Integer;
begin
  LValue := -3.9223669552E+06;

  LExtend := Math.Floor(Log10(Abs(LValue)));
  LManti  := LValue / Math.IntPower(10, LExtend);

  LValue := LManti + LExtend;
  ShowMessage(FloatToStr(LValue));  //2.0776330448になる
end;




02_インターネットの向こう側は見えない


上のコードは、おそらく質問された方が知りたい情報ではないと思われます。知りたかったのは、おそらく、そのような結果になる原因か、あるいは、意図した計算の方法ではないかと思われます。
以下の記事は、質問された方が知りたかったのではないかということを、筆者が勝手に予想して、その内容を記事にしたものです。

コミュニティの場での質問では、何をどうしたいのかを明確に示すことも必要です。
自分が何をどの様に操作して、何をしたいのかを、インターネットの向こう側に伝えなければ問題の解決にはつながりません。何も書かなければ、インターネットの向こう側にいる方には、質問者が、何をどの様に操作して、何を考えているかを知ることは不可能です。
向かい合って、対話しながら、コンピュータの画面を見ながら説明するのとは訳が違います。



[備考]
遥かな昔ですが、テストすべき環境を訊いたら,「私と同じ環境でお願いします」という返事を受け取ったことがあります。受けを狙ったのかどうかは、今でも謎です。
ほとんど場合、Delphi のバージョンと Windows のバージョン程度の情報は必要です。





03_エスパーに期待するのは無理 - レスする義務は誰にもない


読む相手に理解しもらうと言うことは、とりも直さず、解決への早道となるわけです。
掲示板等のコミュニティの場で、文章を読む方に、実際の操作や、具体的な状況を推測させたりして「エスパー」(超能力者) が現れてレスするのを期待して待つには無理があります。

もし仮に、そのような「エスパー」(超能力者) が存在したとしても、必ずしも回答 (レス) するとは限りません。掲示板等のコミュニティの場の発言を見たり、読んだりする方々には、回答する権利はあります。しかし、回答 (レス) する義務は全くありません。

現在の「パソコン」と呼ばれるコンピュータが普及しだした頃、「パソコンが動きません。原因として何が考えられるでしょうか ?」という質問が多くありました。この質問には「何が」ということは書いてありますが、どのような状況なのかは書いてありません。
「まず、筋力を鍛えてください」という回答も多かった記憶があります。






04_コミュニティの場は give & take ( ギブ・アンド・テイク )


「検索したら『解決しました』というのはありましたが、具体的にどのよにしたのかが書いてありません。どのようにしたらいいのでしょうか」という質問を見かけることがあります。

掲示板等のコミュニティの場は基本的に相互扶助、つまり giv & take の場です。
質問の時だけコミュニティの場に現れる方もいますが、質問された方、そして情報を提供してくれた方以外にも多くの方が見ています。そういう方々へのフィードバックも大切です。解決したら、どのような操作、手順で解決したのか、どのようなコードを使用したのか書けば、同じような問題、トラブルかが起きた方の参考になり、上記のようなことはなくなるかも知れません。

これは、take ではなくgive (提供・貢献) となります。ギブ・アンド・テイク(give & take)、これがコミュニティを支えるのです。
掲示板等のコミュニティの場はサポートセンターではありませんが、サポートセンターであっても、解決方法を具体的に提示すれば、そのサポート関係者にも参考になり、同じ様な質問があった時に参考になるでしょう。

昔、このようなことを返信したら「簡単だから分かると思います」と返事してきた方がいました。でも、その「簡単」なことが分からないから訊いてきたのではないでしょうか。
解決してしまえば簡単かも知れませんが、分からない時は分からないのです。「喉元過ぎれば熱さを忘れる」ではありませんが、自分に知識がなかった時のこと、解らなかった時のことが完全に忘却の彼方に消えています。

「give me!」だけではなく、是非、何が問題であって、どのように解決したのかを具体的に give してください。