2010-04-22 4 views
94

मैं तो जैसे दो अंकों की संख्या के लिए एकल अंकों की संख्या परिवर्तित करने के लिए देख रहा हूँ:रेल पर रूबी: यदि आप 10 वर्ष से कम हैं तो आप संख्या के सामने जोड़ शून्य कैसे जोड़ सकते हैं?

9 ==> 09 
5 ==> 05 
12 == 12 
4 ==> 04 

मैं समझ रहा है, तो-और कुछ बयानों का एक समूह डाल (संख्या 10 के अंतर्गत है, तो एक gsub करते हैं) कर सकता है लेकिन आंकड़े कि भयानक कोडिंग है। मुझे पता है कि रेल के पास number_with_precision है लेकिन मुझे लगता है कि यह केवल दशमलव संख्याओं पर लागू होता है। सिंगल-अंकों को दो अंकों में कैसे परिवर्तित करें इस पर कोई विचार?

उत्तर

124

क्या आपका मतलब sprintf '%02d', n था?

irb(main):003:0> sprintf '%02d', 1 
=> "01" 
irb(main):004:0> sprintf '%02d', 10 
=> "10" 

आप भविष्य में format table for sprintf संदर्भित करने के लिए चाहते हो सकता है, लेकिन इस विशेष उदाहरण के लिए '%02d' एक पूर्णांक (d) मुद्रित करने के लिए ऊपर रिक्त स्थान के बजाय शून्य से कम से कम 2 वर्ण (2) और बाएं गद्दी लेने का मतलब है (0)।

+0

धन्यवाद मार्क !! बिल्कुल सही =) धन्यवाद! – sjsc

+0

आपको इस मामले के लिए शायद '% 02i' का उपयोग करना चाहिए क्योंकि यह अधिक स्पष्ट है कि आउटपुट एक पूर्णांक होना चाहिए, डी उन लोगों के लिए कम सहज है जो' sprintf' का उपयोग करने के आदी नहीं हैं। – SeanJA

6

इस प्रयास करें, यह काम करना चाहिए:

abc= 5 
puts "%.2i" %abc >> 05 


abc= 5.0 
puts "%.2f" %abc >> 5.00 
+0

बहुत बढ़िया, बिल्कुल वही जो मैं खोज रहा था। क्या कोई दस्तावेज उपलब्ध है या आप इसके बारे में कैसे सीखने आए हैं? – TheMouseMan

167

sprintf का उपयोग कर (जो ऐसा करना सही है), और मुझे लगता है कि यह सबसे अच्छा है अगर आप एक स्ट्रिंग के लिए इस क्या करना चाहते हैं लोगों का एक बहुत rjust और ljust तरीकों को ध्यान में रखना:

"4".rjust(2, '0') 

यह सुनिश्चित करने के द्वारा "4" सही जायज कर देगा यह है कम से कम 2 वर्ण लंबा एक डीके साथ इसे पैड करें। ljust विपरीत है।

+2

यदि आप तारों को अनुमति देना चाहते हैं तो यह केवल स्प्रिंटफ से बेहतर है। अन्यथा मैं sprintf का उपयोग करता हूं, क्योंकि अगर मैं गलती से एक स्ट्रिंग का उपयोग करता हूं तो यह एक अपवाद फेंकता है (जैसे इसे करना चाहिए)। –

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

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