आप अपने उत्तर को गोल करना चाहते हैं।
round(value,significantDigit)
ऐसा करने के लिए सामान्य समाधान है, हालांकि यह कभी-कभी संचालित नहीं होता है क्योंकि कोई गणित के दृष्टिकोण से उम्मीद करता है जब अंक तुरंत हीन हो (बाएं से) जिस अंक को आप गोल कर रहे हैं वह एक है5
।
यहाँ इस अप्रत्याशित व्यवहार के कुछ उदाहरण दिए गए हैं:
>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01
अपने इरादे को मानते हुए, विज्ञान में आँकड़ों के लिए पारंपरिक दौर करना है, यह काम करने के round
लिए import
अतिरिक्त सामान की आवश्यकता के रूप में कार्य करने के लिए एक आसान आवरण है Decimal
।
>>> round(0.075,2)
0.07
>>> round(0.075+10**(-2*6),2)
0.08
अहा! तो इस पर आधारित हम एक समारोह कर सकते हैं ...
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1), digits)
मूल रूप से यह स्ट्रिंग के लिए वास्तव में एक छोटा सा मूल्य जोड़ता है इसे अप्रत्याशित उदाहरणों पर ठीक से गोल करने के लिए मजबूर करने के लिए जहां यह round
फ़ंक्शन के साथ सामान्य रूप से नहीं करता है जब आप इसकी अपेक्षा करते हैं। जोड़ने के लिए एक सुविधाजनक मूल्य वह संख्या है 1e-X
जहां X
आप उस स्ट्रिंग संख्या की लंबाई है जो आप round
प्लस पर उपयोग करने का प्रयास कर रहे हैं 1
।
उपयोग करने का दृष्टिकोण 10**(-len(val)-1)
जानबूझकर किया गया था, क्योंकि यह सबसे बड़ी छोटी संख्या है जिसे आप बल को जोड़ने के लिए जोड़ सकते हैं, जबकि यह सुनिश्चित करना कि आप जो मूल्य जोड़ते हैं वह कभी भी गोलाई को नहीं बदलता भले ही दशमलव .
गायब हो। मैं और अधिक घटाना करने के लिए सिर्फ 10**(-len(val))
एक सशर्त के साथ उपयोग कर सकता है ... लेकिन यह सिर्फ हमेशा घटाना आसान हैif (val>1)
1
1
रूप में क्योंकि यह दशमलव संख्याओं के लागू रेंज को ज्यादा नहीं बदलेगा यह समाधान ठीक से संभाल सकता है। यह दृष्टिकोण विफल हो जाएगा यदि आपके मान प्रकार की सीमा तक पहुंचते हैं, तो यह विफल हो जाएगा, लेकिन मान्य दशमलव मानों की पूरी श्रृंखला के लिए इसे काम करना चाहिए।
तो समाप्त कोड कुछ इस तरह होगा:
def main():
printC(formeln(typeHere()))
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1))
def typeHere():
global Fahrenheit
try:
Fahrenheit = int(raw_input("Hi! Enter Fahrenheit value, and get it in Celsius!\n"))
except ValueError:
print "\nYour insertion was not a digit!"
print "We've put your Fahrenheit value to 50!"
Fahrenheit = 50
return Fahrenheit
def formeln(c):
Celsius = (Fahrenheit - 32.00) * 5.00/9.00
return Celsius
def printC(answer):
answer = str(roundTraditional(answer,2))
print "\nYour Celsius value is " + answer + " C.\n"
main()
... आपको आपके द्वारा अपेक्षित परिणाम देने चाहिए।
इसे पूरा करने के लिए आप दशमलव पुस्तकालय का भी उपयोग कर सकते हैं , लेकिन मैं जो प्रस्तावना करता हूं, वह सरल है और कुछ मामलों में पसंद किया जा सकता है।
संपादित करें: यह इंगित करने के लिए धन्यवाद ब्लैंकनथ कि 5
फ्रिंज केस केवल कुछ मूल्यों के लिए होता है ।