पायथन 2.7 का उपयोग करते हुए मैं 10 या इसके बजाय दो दशमलव स्थानों पर अपनी संख्याओं को कैसे गोल करूं?
print "financial return of outcome 1 =","$"+str(out1)
जवाबों:
अंतर्निहित फ़ंक्शन का उपयोग करें round()
:
>>> round(1.2345,2)
1.23
>>> round(1.5145,2)
1.51
>>> round(1.679,2)
1.68
या अंतर्निहित समारोह format()
:
>>> format(1.2345, '.2f')
'1.23'
>>> format(1.679, '.2f')
'1.68'
या नई शैली स्ट्रिंग स्वरूपण:
>>> "{:.2f}".format(1.2345)
'1.23
>>> "{:.2f}".format(1.679)
'1.68'
या पुरानी शैली स्ट्रिंग स्वरूपण:
>>> "%.2f" % (1.679)
'1.68'
मदद पर round
:
>>> print round.__doc__
round(number[, ndigits]) -> floating point number
Round a number to a given precision in decimal digits (default 0 digits).
This always returns a floating point number. Precision may be negative.
Decimal("{:.2f}".format(val))
Decimal(format(val, '.2f'))
।
Decimal('123.345').quantize(Decimal('1.00'), rounding=decimal.ROUND_HALF_UP)
आपको देता है Decimal('123.35')
। दूसरी ओर Decimal(format(Decimal('123.345'), '.2f'))
आपको देता है Decimal('123.34')
क्योंकि 123.345 का बाइनरी प्रतिनिधित्व 123.345 से कम है।
चूंकि आप वित्तीय आंकड़ों के बारे में बात कर रहे हैं , आप फ्लोटिंग-पॉइंट अंकगणित का उपयोग नहीं करना चाहते हैं । आप दशमलव का उपयोग करके बेहतर हैं।
>>> from decimal import Decimal
>>> Decimal("33.505")
Decimal('33.505')
नई शैली के साथ पाठ आउटपुट स्वरूपण format()
(अर्ध-समतल गोलाई के लिए चूक):
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.505")))
financial return of outcome 1 = 33.50
>>> print("financial return of outcome 1 = {:.2f}".format(Decimal("33.515")))
financial return of outcome 1 = 33.52
फ्लोटिंग-पॉइंट इंप्रेशन के कारण गोलाई में अंतर देखें:
>>> round(33.505, 2)
33.51
>>> round(Decimal("33.505"), 2) # This converts back to float (wrong)
33.51
>>> Decimal(33.505) # Don't init Decimal from floating-point
Decimal('33.50500000000000255795384873636066913604736328125')
वित्तीय मूल्यों को गोल करने का उचित तरीका :
>>> Decimal("33.505").quantize(Decimal("0.01")) # Half-even rounding by default
Decimal('33.50')
विभिन्न लेन-देन में अन्य प्रकार की गोलाई होना भी आम है:
>>> import decimal
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_DOWN)
Decimal('33.50')
>>> Decimal("33.505").quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
Decimal('33.51')
याद रखें कि यदि आप रिटर्न परिणाम का अनुकरण कर रहे हैं, तो संभवतः आपको प्रत्येक ब्याज अवधि में गोल करना होगा, क्योंकि आप प्रतिशत अंशों का भुगतान / प्राप्त नहीं कर सकते हैं, न ही प्रतिशत अंशों पर ब्याज प्राप्त कर सकते हैं। सिमुलेशन के लिए यह स्वाभाविक है कि केवल अंतर्निहित अनिश्चितताओं के कारण फ्लोटिंग-पॉइंट का उपयोग करें, लेकिन यदि ऐसा करते हैं, तो हमेशा याद रखें कि त्रुटि है। इस तरह, नियत-ब्याज निवेश भी इस वजह से रिटर्न में थोड़ा भिन्न हो सकता है।
आप भी उपयोग कर सकते हैं str.format()
:
>>> print "financial return of outcome 1 = {:.2f}".format(1.23456)
financial return of outcome 1 = 1.23
जब पेनीज़ / पूर्णांक के साथ काम कर रहे हों। आप 115 ($ 1.15 में) और अन्य संख्याओं के साथ एक समस्या में चलेंगे।
मेरे पास एक समारोह था जो एक इंटेगर को एक फ्लोट में बदल देगा।
...
return float(115 * 0.01)
वह ज्यादातर समय काम करता था लेकिन कभी-कभी कुछ ऐसा होता था 1.1500000000000001
।
इसलिए मैंने इस तरह से लौटने के लिए अपने कार्य को बदल दिया ...
...
return float(format(115 * 0.01, '.2f'))
और वह लौट आएगा 1.15
। नहीं ( '1.15'
या 1.1500000000000001
एक फ्लोट देता है, एक स्ट्रिंग नहीं)
मैं ज्यादातर इसे पोस्ट कर रहा हूं इसलिए मुझे याद है कि मैंने इस परिदृश्य में क्या किया क्योंकि यह Google में पहला परिणाम है।
मुझे लगता है कि सबसे अच्छा, प्रारूप () फ़ंक्शन का उपयोग करना है:
>>> print("financial return of outcome 1 = $ " + format(str(out1), '.2f'))
// Should print: financial return of outcome 1 = $ 752.60
लेकिन मेरा कहना है: वित्तीय मूल्यों के साथ काम करते समय गोल या प्रारूप का उपयोग न करें।
format
एफ प्रारूप के लिए गैर-स्ट्रिंग की आवश्यकता है। अगर आपको ValueError नहीं मिली। सही कोड है: format(out1, '.2f')
स्ट्रिंग के लिए कास्टिंग के बिना
जब हम राउंड () फ़ंक्शन का उपयोग करते हैं, तो यह सही मान नहीं देगा।
आप इसका उपयोग करके देख सकते हैं, राउंड (2.735) और राउंड (2.725)
इस्तेमाल करें
import math
num = input('Enter a number')
print(math.ceil(num*100)/100)
बल्कि साधारण वर्कअराउंड फ्लोट को पहले स्ट्रिंग में बदलना है, पहले चार नंबरों के विकल्प का चयन करें, आखिर में फ्लोट को वापस ले जाना। उदाहरण के लिए:
>>> out1 = 1.2345
>>> out1 = float(str(out1)[0:4])
>>> out1
सुपर कुशल नहीं हो सकता है लेकिन सरल और काम करता है :)
अगले 0.05 तक चक्कर लगाना, मैं इस तरह से करूँगा:
def roundup(x):
return round(int(math.ceil(x / 0.05)) * 0.05,2)
Decimal
s का उपयोग करना चाह सकते हैं , यह इस बात पर निर्भर करता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं।