मैं नंबर है कि मैं से जाने के लिए करना चाहते हैं:सबसे तेजी से रास्ता निकटतम 5/100ths के दौर में
1.215145156155 => 1.2
1.368161685161 => 1.35
1.578414616868 => 1.6
(* ध्यान दें:। सैकड़ा जगह अगर यह शून्य है चिह्नित नहीं किया जाना चाहिए)
सबसे तेज़ ऐसा करने का तरीका क्या है?
यह है कि मैं क्या अभी है, और यह तेजी से पर्याप्त नहीं है:
def rounder(v):
v = str(round(float(v),2))
if len(v) == 3: v = v + str(0)
d0 = int(v[0])#ones
d1 = int(v[2])#tenths
d2 = int(v[3])#hundredths
if d2 <= 4:
return str(d0)+'.'+str(d1)
elif 4 < d2 < 7:
return str(d0)+'.'+str(d1)+str(5)
elif d2 >= 7:
if d1 != 9:
return str(d0)+'.'+str(d1+1)
if d1 == 9:
return str(d0+1)+'.'+str(0)
यदि आप संख्या पर 'str() 'का उपयोग करते हैं, तो लंबे दशमलव को दूर जाना चाहिए। (या लंबाई को बाधित करने के लिए% f या '.format()' का उपयोग करें।) –
पाइथन 2.6 में बस '1.35' दर्ज करने से' 1.3500000000000001' भी मिलता है। पायथन 2.7 और पायथन 3.x में अद्यतन एल्गोरिदम '1.35' देता है। –
@ ब्रैंडन, @ स्वेन: योग्यता टिप्पणियों के लिए धन्यवाद। वे वास्तव में मेरे जवाब को पूरा करने में मदद करते हैं (क्षमा करें, मैं बस खुद की मदद नहीं कर सका)। पीएस .: "धन्यवाद" असली है। –