浮動小数点の扱いについて

解決


Kooho  2015-03-10 00:07:22  No: 47083

Windows標準の電卓のように

浮動小数点の「-3.9223669552E+06」を「2.0776330448」に変換させる

にはどうしたらよいのでしょうか。ネットで探してもうまく探せません。

どなたかご教授お願いします。


通りすがり  2015-03-10 02:46:52  No: 47084

よし、ひさしぶりに貼っとくか

技術系メーリングリストで質問するときのパターン・ランゲージ
http://www.hyuki.com/writing/techask.html


F-E  2015-03-10 02:47:37  No: 47085

「-3.9223669552E+06」と「2.0776330448」は等価ではないので何をどう変換したいのか分からないと答えようがないと思いますが。
そもそも「-3.9223669552E+06」と「-3.9223669552+6.0」を混同してませんか?

まずあなたは指数表記について勉強するべきでしょう。
それが分からないと、変換した後の数値が正しいかどうか自分で判断することもできないのでは?


Kooho  2015-03-10 03:53:12  No: 47086

通りすがりさん、F-Eさんありがとうございます。

結果的に「-3.9223669552E+06」を「-3922366.9552」にすれば良いだけでした。
Windowsの電卓ですと「-3.9223669552E+06」を入力して「=」を押すと
「2.0776330448」になるみたいです。

指数がよくわかっていませんでしたので、意味不明ですみませんでした。


Mr.XRAY  2015-03-10 05:18:11  No: 47087

>Windowsの電卓ですと「-3.9223669552E+06」を入力して「=」を押すと
>「2.0776330448」になるみたいです。  

本当ですか ?

以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/Others/008.htm

まさか,ここで関数電卓の使い方の説明をすることになるとは思いませんでした (笑)


Kooho  2015-03-10 07:01:19  No: 47088

Mr.XRAYさんありがとうございます。

電卓に「-3.9223669552E+06」をクリップボードから
貼り付けるのはダメだったのですね。

勉強になりました、ありがとうございました!


Mr.XRAY  2015-03-10 07:59:40  No: 47089

>電卓に「-3.9223669552E+06」をクリップボードから
>貼り付けるのはダメだったのですね。

クリップボードから電卓の入力に貼り付けできない,ということは    ないですよ.
ちゃんとメニューにもありますから.
重要なのは,電卓の入力欄に,目的の値がセットされているかを確認することではないかと思います.


Mr.XRAY  2015-03-10 08:06:53  No: 47090

>重要なのは,電卓の入力欄に,目的の値がセットされているかを確認することではないかと思います.
  
ものはついででやってみました.

-3.9223669552E+06 を電卓の入力にコピペすると,以下のような表示になりました.

 -3.9223669522 +
               6
         
つまり,ここで, = (イコール) キーを押すと

 -3.9223669522 + 6
 
という計算結果が表示されることになります.
マイクロソフトが提供している電卓ですから「くせ」があるのでしょう.
それに文句を言っても致し方ありません.
使う方が自分で確認することだと思います.


Mr.XRAY  2015-03-11 07:07:41  No: 47091

http://mrxray.on.coocan.jp/Delphi/Others/008.htm#02

をふまえて.
またまた,僭越ですが,質問された方の代わりにまとさせていただきます.
質問の文章には,Delphi, Windows のバージョンの記載がありませんので,これまた勝手に.

 (1) Windows 7 の電卓を起動して,関数電卓にする
 (2) -3.9223669552E+06 をコピーして電卓に貼り付ける
 (3)  電卓の = キーを押すと,2.0776330448 という値になる
 
そこで質問です.このように,-3.9223669552E+06 という値から,電卓と同じ値を計算するには,
Delphi XE ではどのようにすればいいのでしょうか ?

回答例
  例えば以下のようにするとできます.
  uses に Math が必要です.
  
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;


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加