掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
計算結果を正しく求めるには? (ID:5174)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
これでどうでしょう? function A(s: Extended): Variant; begin Result := s; // 文字列に変換した方が良いかも? end; var d1, d2: Extended; begin d1 := StrToFloat(A(10.2)); d2 := StrToFloat(A(100)); ShowMessage( IntToStr(Trunc( d1 * d2 )) ); end; d1,d2をExtendedにしてA()を文字列と見なしStrToFloatで変換しています。 ちなみに d1 := Extended(A(10.2)); とするとd1には10.2が入りません。 ということは、A(10.2)の戻り値は、Extended型で10.2が正しく入っているようなのでExtendedにキャストするときに Extended (10.2) ↓(ここで丸め誤差発生) Double (10.199999...) ↓ Extended (10.199999...) という処理をしているようです。 で、StrToFloatを使うと Extended (10.2) ↓(丸め誤差は発生しない) String ("10.2") ↓ Extended (10.2) 正しくD1に代入できるようです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.