में अल्पविराम और निर्दिष्ट सटीक अंकों के साथ एक संख्या को प्रारूपित करने के लिए कैसे प्रश्न Python 2.6 के लिए है, यह हमारे उत्पादन में है।पायथन
मेरे पास अल्पविराम के साथ एक संख्या (1234567.0987 या 1234567.0) स्वरूपण करने के लिए यह आवश्यकता है, और दशमलव बिंदुओं के बाद अंकों की निर्दिष्ट संख्या। तो, अगर यह परिशुद्धता तीन है, 1234567.0987 1,234,567.099 की तरह लग सकता है।
मैंने लोकेल का उपयोग करने की कोशिश की, जैसा कि कई सवालों के जवाब दिए गए हैं, समस्या यह है कि दशमलव के बाद दो अंक होते हैं, जो मेरी आवश्यकता के लिए स्वीकार्य नहीं है।
मैं अन्य स्थानों में खोज करने की कोशिश की, लेकिन किसी भी समाधान नहीं मिला, और अंत में मैं अपने खुद के द्वारा एक विधि बनाया:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first/1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
मैं विधि का परीक्षण करने के लिए कुछ परीक्षण चलाने के लिए करने की कोशिश की है और यह ठीक काम करता है :
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'
# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'
पायथन के लिए नया होने के नाते, मेरा सवाल यह है कि यह एक स्वीकार्य समाधान है या नहीं। चूंकि इस स्वरूपण को तंग फॉर-लूप में कई बार किया जाना है, अगर कोई बेहतर समाधान को इंगित कर सकता है तो मैं सराहना करता हूं।
धन्यवाद और अजगर 2.7 और 3.x के लिए सभी
इसे '1000000' के साथ आज़माएं। –
मार्क, धन्यवाद। यह वही एक अच्छा बग है, मुझे इसे ठीक करने की ज़रूरत है। – cspider
आपको 'लोकेल' मॉड्यूल का उपयोग करने की आवश्यकता नहीं है। प्रश्न का मेरा जवाब देखें [_ पायथन में एक पूर्णांक में अल्पविराम जोड़ने का सबसे आसान तरीका क्या है? _] (Http://stackoverflow.com/q/3909457/355230)। – martineau