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 してください.