2012-10-11 9 views
9

मैं Cygwin के इतालवी स्थानीयकरण का उपयोग, और इसलिए मेरी printf आदेश अलग तैरता करने के लिए अल्पविराम का उपयोग करता है, और डॉट-अलग तैरतामैं printf कमांड में दशमलव विभाजक को बैश में कैसे बदलूं?

$ printf "%f" 3.1415 
-bash: printf: 3.1415: invalid number 
0,000000 

$ printf "%f" 3,1415 
3,141500 

यह कई समस्याओं को जन्म देता है समझ में नहीं होगा, क्योंकि मूल रूप से सब कुछ एक बिंदु का उपयोग करता है दशमलव अंक अलग करने के लिए।

मैं दशमलव सेपरेटर को अल्पविराम से डॉट में कैसे बदल सकता हूं?

उत्तर

12

कई स्थानीय चर हैं जो साइगविन के स्थानीयकरण (या किसी भी बैश खोल के मामले में) को नियंत्रित करते हैं। आप locale कमांड का उपयोग करके उन्हें अपने मूल्य के साथ देख सकते हैं। आप कुछ इस तरह देखना चाहिए:

$ locale 
LANG=it_IT.UTF-8 
LC_CTYPE="it_IT.UTF-8" 
LC_NUMERIC="it_IT.UTF-8" 
LC_TIME="it_IT.UTF-8" 
LC_COLLATE="it_IT.UTF-8" 
LC_MONETARY="it_IT.UTF-8" 
LC_MESSAGES="it_IT.UTF-8" 
LC_ALL= 

आप locale -va का उपयोग करके चर के संभावित मान देख सकते हैं। वे सभी _.UTF-8 की तरह स्वरूपित हैं। यूटीएफ -8 वैकल्पिक है। उत्तरी अमेरिकी फ्लोट अलगाव शैली में स्विच करने के लिए बस अपने अमेरिकी मूल्य पर एलसी_NUMERIC सेट करें।

$ export LC_NUMERIC="en_US.UTF-8" 

सीधे शब्दों में चर LC_NUMERIC सेटिंग के रूप में अगर यह थे एक नियमित रूप से चर काम नहीं करेगा, आप निर्यात आदेश का उपयोग करने की आवश्यकता है।

आप अपनी स्क्रिप्ट के शीर्षक में इस डाल सकते हैं, या आप अपने ~/.bashrc या अपने ~/.bash_profile

आशा इस मददगार था में जोड़कर यह स्थायी कर सकते हैं!

+1

तुम सिर्फ सेट कर सकते हैं 'LC_NUMERIC =" en_US.UTF- 8 "', लेकिन यह पूरे सिस्टम में सेटिंग को नहीं बदलता है, लेकिन स्क्रिप्ट या खोल के दायरे में सेटिंग में किया जाता है। इसके अलावा, आप केवल 'LC_NUMERIC = "en_US द्वारा कमांड के लिए लोकेल बदल सकते हैं। यूटीएफ -8 "printf"% f "3.1415'। – jarno

+1

एक बेहतर (आईएमओ) समाधान के लिए नीचे उत्तर देखें जो आपके द्वारा इंस्टॉल किए गए लोकेशंस से स्वतंत्र रूप से काम करता है। – mav

6

आप सिस्टम विन्यास के साथ गड़बड़ नहीं करना चाहते हैं, तो आप अपने स्थान का सम्मान करते हैं लेकिन सुनिश्चित करें कि अपनी स्क्रिप्ट वाली दशमलव के लिए डॉट्स का उपयोग करता है बना सकते हैं:

$ printf "%f" 3.5 
-bash: printf: 3,5: invalid number 
0.000000 

$ LANG=C printf "%f" 3.5 
3.500000 
+1

ऐसे मामले हैं जहां 'LANG = C' पर्याप्त नहीं है, 'LC_NUMERIC = C' बेहतर काम करता है। –

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