2012-11-19 31 views
6

में 2 दशमलव स्थानों का उत्तर देने के लिए मेरा मुद्दा है कि मैं अपने परिणाम को 2 दशमलव स्थानों पर गोल कर रहा हूं। मेरा ऐप के रूप में आप मुद्रा के साथ होता है फिर भी, मैं निकटतम दशमलव करने के लिए एप्लिकेशन दौर बना रही कठिनाई हो रहा है, सही परिणाम प्राप्त होता हैपायथन

cost = input("\nEnter the 12 month cost of the Order: ") 
cost = float(cost) 

print("\n12 Month Cost:", 
    cost * 1,"USD") 
print("6 Month Cost:", 
    cost * 0.60,"USD") 
print("3 Month Cost:", 
    cost * 0.36,"USD") 
तो उदाहरण के लिए

12 महीने कीमत $ 23, 6 महीने के मूल्य 13.799999999999999 है है अगर लेकिन मैं इसे 1380

मैंने Google के चारों ओर देखा है और एक संख्या को कैसे गोल किया है, लेकिन परिणामस्वरूप गोल करने में बहुत मदद नहीं मिल पाई।

+0

12 महीने, 6 महीने और 3 महीने की लागत के लिए बस आपके गुणक के बारे में एक बिंदु ... मुझे लगता है कि यह 1, 0.6 और 0.36 के बजाय 1, 0.5 और 0.25 होना चाहिए। आप 12 महीने (6 महीने) का 50% और 12 महीने के 25% (3 महीने) ले रहे हैं। – dhj

+0

@ डीएचजे यह संभव है कि ओपी एक सदस्यता प्रणाली लिख रहा है जो सब्सक्राइब किए गए समय की अवधि के आधार पर सर्वोत्तम छूट देता है। $ 13.80 के लिए छह महीने के लिए सदस्यता लें, लेकिन बारह महीनों के लिए सदस्यता लेना वर्ष की लागत से $ 4.60 सस्ता है! – kreativitea

+0

@ क्रिएटिवेटा ... उत्कृष्ट बिंदु! मैं गणित/विज्ञान डेटा प्रोसेसिंग का बहुत कुछ करता हूं। मेरे हिस्से पर शर्मनाक धारणा। – dhj

उत्तर

10

आप एक फॉर्मेट स्पेसिफायर का उपयोग करना चाहिए गोलाई विधि पर नियंत्रण:

from decimal import Decimal, ROUND_HALF_UP 
def round_decimal(x): 
    return x.quantize(Decimal(".01"), rounding=ROUND_HALF_UP) 

cost = Decimal(input("Enter 12 month cost: ")) 
print("6 Month Cost: ", round_decimal(cost * Decimal(".6"))) 
+0

मुद्रा स्वरूपों से परे इसे लेना, यदि आमतौर पर ['दशमलव'] (http://docs.python.org/2/library/) का उपयोग करने के बजाय नियमित पायथन दशमलव संख्याओं पर प्रारूप विनिर्देशक का उपयोग किया जाता है, तो यह आमतौर पर बेहतर प्रदर्शन नहीं करेगा। दशमलव.html) मॉड्यूल? – jvriesem

2

एक क्लासिक तरीका 100 से गुणा करना है, 0.5 जोड़ें (यह गोल करने के लिए है) और int() परिणाम। अब आपके पास गोलाकार सेंट की संख्या है, गोलाकार फ्लोट वापस पाने के लिए 100 से विभाजित करें।

print("6 Month Cost: %.2fUSD" % (cost * .6)) 

और भी बेहतर, तुम सब पर चल बिन्दु संख्या पर निर्भर नहीं होना चाहिए और इसके बजाय decimal मॉड्यूल का उपयोग, जो आप मनमाने ढंग से सटीक और भी बहुत कुछ देता है:

cost = 5.5566 
cost *= 100 # cost = 555.66 
cost += 0.5 # cost = 556.16 
cost = int(cost) # cost = 556 
cost /= float(100) # cost = 5.56 

cost = 5.4444 
cost = int((cost * 100) + 0.5)/float(100) # cost = 5.44 
1

आप इसे मुद्रित करने के लिए चाहते हैं, स्ट्रिंग स्वरूपण काम करेगा:

print("\n12 Month Cost:%.2f USD"%(cost*1)) 
2

तुम सिर्फ एक स्ट्रिंग के रूप में यह करना चाहते हैं, प्रारूप में मदद कर सकते हैं:

format(cost, '.2f') 

यह समारोह एक स्ट्रिंग है के रूप में दूसरा पैरामीटर में परिभाषित से स्वरूपित है देता है। इसलिए यदि लागत में 3.1418 शामिल है तो उपरोक्त कोड '3.14' स्ट्रिंग देता है।