2009-07-03 9 views
6

होने:।।### करने के लिए एक नाव का प्रारूपण ## (दो दशमलव)

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)); 

मैं किसी भी ### करने के लिए परिणामी पाठ स्वरूपित करना चाहते हैं ## (दो दशमलव)। FloatToStrF का उपयोग करना कोई सफलता नहीं है (DWORD के साथ काम नहीं करता है)।

धन्यवाद

उत्तर

5

बस अगर यह गणित के बजाय स्वरूपण के साथ एक समस्या है सोच। आप वस्तुओं की संख्या 1000 से क्यों विभाजित कर रहे हैं? क्या आप 1000 से मिलीसेकंड (अपना अंतर परिवर्तनीय) विभाजित करने का मतलब है? हो सकता है कि आप यही चाहते हैं:

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

बेशक, आप अभी भी परिणाम स्वरूपित करना चाहते हैं। आपको इसे एक चर या वर्ग गुण के रूप में आवश्यकता होगी:

MyFormatSettings: tformatsettings; 

, तो आपको इसे एक बार करने की आवश्यकता होगी, उदा। FormShow में:

getlocaleformatsettings(locale_system_default, MyFormatSettings); 

अंत में, यह काम करना चाहिए:

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

यदि ओपी एक सूची आइटम को संसाधित करने के लिए आवश्यक समय दिखाना चाहता है, तो यह कुछ ऐसा नहीं होना चाहिए: "कुछफ्लैट: = 0.001 * (अंतर/List.Items.Count); " बजाय? बेशक 0 वस्तुओं को पहले संभालना होगा ... – mghie

+0

हां मुझे विभाजित करना है। EventPerMinute: = List.Items.Count/difference/1000; कुछ समाधान: sb.panels [2] .Text: = floattostr (eventperminute); // ठीक है लेकिन sb.panels [2] स्वरूपित नहीं है। आगे: = floattostrF (EventPerMinute, ffNumber, 4,3); // हमेशा 0 sb.panels [2]। पाठ: = प्रारूप ('% f', [eventperminute]); // हमेशा 0 sb.panels [2] .Text: = FormatFloat ('#, ## 0', EventPerMinute); // हमेशा 0 --------------- यह गणना एक टाइमर घटना पर है, हर 1000 एमएस ट्रिगर। – volvox

+0

यदि 5000 मिलीसेकंड में 10 सूची आइटम हैं, तो 10/5000/1000 0.000002 मिलेगा - कोई आश्चर्य नहीं कि आपको शून्य मिल जाएगा! यहां तक ​​कि यदि आप सुझाव देते हैं, तो भी 10/(5000/1000) = 2 यह प्रति सेकेंड प्रति सेकंड घटनाओं में है। प्रति मिनट के लिए, आपको 60000 से विभाजित करना होगा! – Argalatyr

9

आप format strings साथ प्रारूप समारोह का उपयोग क्यों नहीं करते हैं? उदाहरण:

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

मैं पहले से ही उन सभी समाधान की कोशिश की है .. उदाहरण: sb.panels [2] .text: = FormatFloat ('#, # # 0 ', ((List.Items.Count)/अंतर)/1000); परिणाम हमेशा होता है 0. अधिभार संस्करण के बारे में क्या? आपके पास इसका उपयोग करने का एक उदाहरण है? – volvox

+0

शायद आपके स्थानीय लोगों में, 1k डेलीमीटर का अर्थ है और आपको इसका उपयोग करना चाहिए। बजाय। –

+0

जानकारी के लिए धन्यवाद, सराहना की। मेरी समस्या अब हल हो गई है। – volvox

संबंधित मुद्दे