2009-07-03 7 views
6

:。。私はすべての###の結果のテキストをフォーマットしたいは###にするフロートのフォーマット##(小数点以下2桁)を有する

var 
Difference: DWORD // difference shows in milliseconds 
// List.Items.Count can be any 0 to ######## 
[...] 
sb.panels[2].Text := FloatToStr((((List.Items.Count)/difference)/1000)); 

##(2つの小数)。 FloatToStrFの使用は成功しません(DWORDでは動作しません)。

おかげであなたはformat stringsでフォーマット機能を使用していないのはなぜ

答えて

5

だろう。なぜアイテムの数を1000で割りますか?ミリ秒(あなたのDifference変数)を1000で割りますか?おそらく、これはあなたが望むものです:

EventRate := (List.Items.Count)/(difference/1000); // events per second; to make it per minute, need to change 1000 to 60000 

もちろん、あなたはまだ結果をフォーマットしたいと思うでしょう。これは変数またはクラスのプロパティとして必要です:

MyFormatSettings: tformatsettings; 

次に、これを1回実行する必要があります。 FormShowに:

getlocaleformatsettings(locale_system_default, MyFormatSettings); 

最後に、これは動作するはずです: sb.panels [2]の.text::= FormatFloat( '#、#

sb.panels[2].Text := format('%5.2f', EventRate, MyFormatSettings); 
+0

OPが1つのリスト項目を処理するのに必要な時間を表示したい場合は、次のようにしてはいけません: "SomeFloat:= 0.001 *(difference/List.Items.Count); "代わりに?もちろん、0個のアイテムを処理する必要があります。 – mghie

+0

はい、私は分けなければなりません。 EventPerMinute:= List.Items.Count/difference/1000; いくつかの解決策: sb.panels [2]。テキスト:= floattostr(eventperminute); // OKですがフォーマットされていません sb.panels [2]。テキスト:= floattostrF(EventPerMinute、ffNumber、4,3); //常に0 sb.panels [2]。テキスト:=書式( '%f'、[eventperminute]); //常に0 sb.panels [2]。テキスト:= FormatFloat( '#、## 0'、EventPerMinute); //常に0 --------------- この計算は、1000ミリ秒ごとにトリガーされるタイマーイベントで実行されます。 – volvox

+0

5000ミリ秒で10個のリストアイテムがある場合、10/5000/1000は0.000002を生成します。私が示唆したように、10 /(5000/1000)= 2であっても、これは1分あたりのPER秒ではありません。毎分、60000で割り切る必要があります! – Argalatyr

9

?例:

sb.panels[2].Text := Format('%8.2f',[123.456]); 

その他の機能は、これは数学に問題はなく、書式設定された場合だけ不思議

function FormatFloat(const Format: string; Value: Extended): string; overload; 
function FormatFloat(const Format: string; Value: Extended; const FormatSettings: TFormatSettings): string; overload; 
+0

を私はすでに、すべてのこれらのソリューション..例を試してきました#0 '、((List.Items.Count)/ difference)/ 1000)。 結果は常に0です。オーバーロードバージョンはどうですか?あなたはそれを使用している例がありますか? – volvox

+0

おそらくあなたの地元の人には、1k区切り文字を意味するので、使用するべきです。代わりに。 –

+0

感謝していただきありがとうございます。私の問題は解決しました。 – volvox