2017-11-14 10 views
-1

私が書いているDelphiプログラムに問題があります。正確TimeToStr(myrobot.fOra)無効な浮動小数点演算Delphi

type 
    TRobot = class(TObject) 
    private 
    public 
    fAcceso: Boolean; 
    fOra: TTime; 
    fCode: Integer; 
    mex: string; 
    constructor Create; 
    end; 

// ... 

myrobot.mex:= ('Acceso: '+ BoolToStr(myrobot.fAcceso) + 
       ',Tempo:' + TimeToStr(myrobot.fOra) + 
       ',Codice:' + IntToStr(myrobot.fCode)); 
memo.Lines.add(myrobot.mex); 

:問題は、このコードの一部です。
問題が発生しました

"無効な浮動小数点演算"です。

誰かが私を助けることができますか?

+2

あなたはmyrobot、特にmyrobot.fOraの定義を与えていません。それがなければ、我々は推測することしかできない。しかし、私の推測では、タイプがTDateTimeまたはTTimeではないと考えられます。 – Dsm

+2

これはあなたが引数を与える関数です。例えば、 'Now'で与えられた値などのテストプログラムでこの同じ関数を呼び出すと、問題はないことがわかります。したがって、この問題は関数に渡す値にあることは明らかです。その知識によって、あなたは次に何をすべきかを知っています。 'myrobot.fOra'の値を調べます。 –

+0

TRobot =クラス(TObject) プライベート 公開 fAcceso:ブール; fOra:TTime; fCode:整数。 mex:string; コンストラクタを作成します。 myrobotはTRobot型のオブジェクトです。 –

答えて

0

このエラーメッセージは、ゼロ除算、負の値の平方根および同様の問題を意味します。これは、myrobot.fOraまたはフォーマット設定で間違っているように見えます。

この行にブレークポイントを設定し、fOraの値をチェックします。それがうまくいけば、F7を使ってTimeToStrに入ることができます(システムライブラリルーチンをデバッグすることができます... VCLソースをインストールしたり、プロジェクトの 'debug dcu(s)'オプションを設定する必要があるかもしれません) 。それを使用すると、エラーの正確な場所に到達し、何が間違っているかを確認することができます。

+2

VCLソースをデバッグする必要はありません。質問者が値を検査するとすぐに問題は明らかになります。質問者はデバッグ方法、プログラムの実行中に中間値を検査する方法をまだ知りません。 –

+0

あなたが正しいかもしれません。答える前に、私はこの例外を再現しようとしばらく時間を費やして失敗しました。私が試したすべての値は正常にTimeToStr-edでした。多分、エラーはそれほど単純ではありません。 –

+0

本当に簡単です。 NaN、Inf、または1e300を渡してみてください –

関連する問題