2012-10-25 14 views
6

के साथ राउंडिंग मैं रूबी में BigDecimal को गोल करना चाहता हूं। मैं जानता हूँ कि मैं दौर समारोह लेकिनरूबी बिग डेसिमल फिक्स्ड नंबर

उपयोग कर सकते हैं दौर समारोह देता

(3.2).round(2) => 3.2 

मैं चाहता हूँ

(3.2).round(2) => 3.20 
(3.20).round(2) => 3.20 
(3).round(2) => 3.00 
(3.578).round(2) => 3.58 

मैं हमेशा 2 दशमलव स्थानों, 3.20 नहीं 3.2

किसी भी करना चाहते हैं विचार यह कैसे किया जाए?

उत्तर

15

इस प्रयास करें:

'%.2f' % 3.2 
=> "3.20" 

'%.2f' % 3 
=> "3.00" 

'%.2f' % 3.578 
=> "3.58" 

etc. 
+0

धन्यवाद .. – Abid

5

के विपरीत, उदाहरण के लिए, Java's BigDecimal के लिए, Ruby's BigDecimal एक प्रति उदाहरण सटीक नहीं है। रुबी बिगडेसिमल में 3.2 और 3.20 के बीच का अंतर सिर्फ स्वरूपण है।

+0

पर यह स्थान मुझे कोई जावा नहीं पता इसलिए मैं शायद गलतफहमी कर रहा हूं। लेकिन कुछ मामलों में रूबी में बिगडिसीमल उदाहरण के लिए एक परिशुद्धता निर्दिष्ट करना अनिवार्य है: 'बड़ी' आवश्यकता '; BigDecimal.new (1/3.0) 'त्रुटि: एक तर्कसंगत के लिए परिशुद्धता को छोड़ नहीं सकता है। – steenslag

+0

सच है, लेकिन प्रारंभिक मूल्य प्राप्त करने के लिए महत्वपूर्ण संख्याओं की संख्या का उपयोग अभी किया जाता है। यह उस उदाहरण में "लॉक इन" नहीं है। 'bigdecimal' की आवश्यकता है; dec = BigDecimal.new (2.345, 2); dec.precs # => [18, 36] 'और' dec.to_s ('F') # => "2.3" ' –

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