2012-10-26 9 views
7

इस प्रश्न के अनुसार: Fractional power of units of measures in F# एफ # में माप की इकाइयों के लिए समर्थित कोई अंश शक्तियां नहीं हैं।एफ # मापन मॉडलिंग मेट्रिक उपसर्ग (माइक्रो, मिली, नैनो)

मेरे आवेदन में, मेट्रिक उपसर्ग के साथ डेटा के बारे में सोचना फायदेमंद है, उदाहरण के लिए सेकंड के साथ काम करते समय। कभी-कभी मुझे मिली-सेकेंड में परिणाम की आवश्यकता होती है, कभी-कभी सेकंड में।

विकल्प मैं वर्तमान में उपयोग करने के बारे में सोच रहा हूँ इस

[<Measure>] type milli 
[<Measure>] type second 

let a = 10.0<second>; 
let b = 10.0<milli*second> 

जो मुझे देता है:

val a : float<second> = 10.0 
val b : float<milli second> = 10.0 

अब मैं दो कार्यों के साथ गणना की अनुमति चाहते हैं। इसलिए मैं

let milliSecondsPerSecond = 1000.0<(milli*second)/second> 

let a = 10.0<second>; 
let b = 10.0<milli*second> 

(a*milliSecondsPerSecond) + b 

जो मुझे देता है कि वास्तव में क्या मैं

val it : float<milli second> = 10010.0 

अब चाहता था कर सकता है, यह सब अच्छा और चमकदार है, लेकिन जल्दी से हाथ से बढ़ता है जब आप कई इकाइयों और कई उपसर्गों का समर्थन करना चाहते हैं। इसलिए मुझे लगता है कि इसे अधिक सामान्य समाधान में सेंकना आवश्यक होगा, लेकिन यह नहीं पता कि कहां से शुरू करना है। मैं

let milliPer<'a> = 1000.0<(milli * 'a)/'a> 

कोशिश की, लेकिन वह काम नहीं क्योंकि च # शिकायत करता है और मुझसे कहता है "गैर-शून्य स्थिरांक सामान्य इकाइयों नहीं हो सकता है" ...

के बाद से मुझे लगता है कि इकाई उपसर्गों एक आम समस्या है, मैं कल्पना करें कि किसी ने पहले इस समस्या को हल किया है। क्या एफ # में इकाई उपसर्ग करने के लिए एक और बेवकूफ तरीका है?

उत्तर

7

आप 1000.0<(milli second)/second> प्रति सेकंड 1000 मिलीसेकंड का प्रतिनिधित्व करते हुए निरंतर लिखते हैं, लेकिन वास्तव में (आप इसे बीजगणितीय सरलीकरण के रूप में कर सकते हैं) "मिली" का मतलब है कि आपको "मिली" के बिना इकाई प्राप्त करने के लिए 1000 तक जो भी इकाई गुणा करने की आवश्यकता है "उपसर्ग।

तो, आप milliPer (और milliSecondsPerSecond) की अपनी परिभाषा को आसान बनाने में कर सकते हैं सिर्फ इतना कहना है:

(10.0<second> * milli) + 10.0<milli second> 
(10.0<meter> * milli) + 10.0<milli meter> 

मुझे लगता है कि:

let milli = 1000.0<milli> 

तो यह उपायों के अन्य प्रकार के साथ उपयोग करने के लिए संभव है इससे कोड में कहीं भी किसी भी जटिलता का कारण नहीं बनना चाहिए - इकाइयों के साथ काम करते समय यह एक बिल्कुल सही पैटर्न है (मैंने लोगों को percent की इकाई का उपयोग करके देखा है, लेकिन फिर रूपांतरण 0.01 है)

+0

केवल डेटा संग्रहण प्रकारों (उदा। केबी, एमबी, जीबी) कुछ संदर्भों में इन आधारों के आधार पर बेस -10 का उपयोग करते हैं, और अन्य संदर्भों में वे बेस -2 का उपयोग करते हैं, इसलिए रूपांतरण कारक 1000 की बजाय 1024 है। –

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