कैसे आप जुबली में दो दशमलव स्थानों पर एक फ्लोट को गोल करते हैं


172

JRuby 1.6.x. कैसे आप जुआरियों में दशमलव स्थानों के लिए एक फ्लोट को गोल करते हैं।

number = 1.1164
number.round(2)

The above shows the following error
wrong number of arguments (1 for 0)

मैं इसे 2 दशमलव स्थानों पर कैसे राउंड करूँ?

जवाबों:


87

फ्लोट # राउंड रूबी 1.9 में एक पैरामीटर ले सकता है, रूबी 1.8 में नहीं। JRuby 1.8 पर डिफॉल्ट करता है, लेकिन यह 1.9 मोड में चलने में सक्षम है


1
मुझे पता है कि यह मुद्रा की तरह कुछ पेश करने के उद्देश्य से नंबर को गोल करने के सैम के इरादे से प्रतीत नहीं होता है, लेकिन ध्यान रखें कि #round (परिशुद्धता) का उपयोग करना उद्देश्य के रूप में काम नहीं करेगा यदि आप ऐसा करने की कोशिश कर रहे हैं (3) .round (2) # => 3.0, 3.00 नहीं)। इसे प्राप्त करने के लिए, नीचे दिए गए थियो द्वारा उत्तर देखें।
जेरेडस्मिथ

290
(5.65235534).round(2)
#=> 5.65

12
(5.6).round(2)केवल 5.6
बाला कार्तिक

3
उचित लगता है, कि अतिरिक्त शून्य प्लेसहोल्डर अभी भी है, इसका अभी दिखाई नहीं दे रहा है
बोल्डर_ब्रुबी

@ बालाकारिक यही कारण है कि मैं थियो द्वारा समाधान का उपयोग कर रहा हूं। यह सही तरीके से गोल होता है (यदि आप किसी विषम कारण के लिए पिछले 3 दशमलव तक जा रहे हैं, तो टिप्पणियां देखें), ताकि स्ट्रिंग उत्पादन की तलाश में बेहतर समाधान हो।
डायलन वैंडर बर्ग

यह सही है। मैं यादृच्छिक अक्षांश और देशांतर उत्पन्न कर रहा था इसलिए मैं 6 अंकों के लिए नंबर (6) का उपयोग करता हूं
gsumk

199

sprintf('%.2f', number)संख्याओं को स्वरूपित करने का एक गूढ़, लेकिन बहुत शक्तिशाली तरीका है। परिणाम हमेशा एक स्ट्रिंग है, लेकिन जब से आप चक्कर लगा रहे हैं, मुझे लगता है कि आप इसे प्रस्तुति उद्देश्यों के लिए वैसे भी कर रहे हैं। sprintfकिसी भी संख्या को किसी भी तरह से स्वरूपित कर सकते हैं, और बहुत अधिक।

पूर्ण स्प्रिंटफ़ दस्तावेज़ीकरण: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf


79
'%.2f' % numberकाम भी अधिक सामान्यतः देखा जाता है, कम से कम मेरे अनुभव में।
माइकल कोहल

6
@MichaelKohl माणिक शैली गाइड संस्करण पर एहसान sprintf(या format) करता है %। इसके लिए कुछ तर्क पर चर्चा की गई है , यह ज्यादातर पठनीयता के बारे में है। ऐसा नहीं है कि हम सभी को स्टाइल गाइड का पालन करना है, बस कुछ कारण बताए :)
लुसी बैन

3
ध्यान दें कि 3 डी दशमलव के बाद, 6 पर स्प्रिंटफ राउंड, 5 पर नहीं, उदाहरण के लिए, स्प्रिंटफ ("% 3f", 1.2225) "1.222", स्प्रिंटफ ("%। 3f", 1.2226) "1.223" होगा। ", अगर आपके लिए यह मायने रखता है, तो
ecoding5

लेकिन 0.566666666666666राउंड टू0.57
अनवर

"%.2f"राउंड 5डाउन, अप के बजाय, क्या इसे ठीक करने का कोई तरीका है?
मिरर318

3

संपादित करें

प्रतिक्रिया मिलने के बाद, ऐसा लगता है कि मूल समाधान काम नहीं किया। इसीलिए उत्तर को एक सुझाव के रूप में अपडेट किया।

def float_of_2_decimal(float_n) 
  float_n.to_d.round(2, :truncate).to_f
end

अन्य उत्तर काम कर सकते हैं, यदि आप 2 दशमलव स्थानों की संख्याओं को गोल करना चाहते हैं। लेकिन, यदि आप राउंडिंग के बिना पहले दो दशमलव स्थानों के साथ फ्लोटिंग पॉइंट नंबर रखना चाहते हैं , तो वे उत्तर मदद नहीं करेंगे।

इसलिए, पहले दो दशमलव स्थानों के साथ एक फ्लोटिंग पॉइंट नंबर प्राप्त करने के लिए, मैंने इस तकनीक का उपयोग किया। कुछ मामलों में काम नहीं करता है

def float_of_2_decimal(float_n)
  float_n.round(3).to_s[0..3].to_f
end

के साथ 5.666666666666666666666666, यह 5.66गोल के बजाय वापस आ जाएगी 5.67। आशा है कि यह किसी की मदद करेगा


1
यह काम नहीं करता है। काम करने के लिए इसे प्राप्त करने के लिए आपको किसी भी आकार की संख्या की आवश्यकता होती है। यहां लागू पैटर्न का उपयोग करके आप कर सकते हैं: def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end या बहुत सरल आप उपयोग कर सकते हैंfloat_n.to_d.round(2, :truncate).to_f
rorykoehler

दशमलव स्थान से पहले 9 से बड़े
अंतर के

बिंदु के लिए धन्यवाद। लेकिन, आपके सुझाए गए तरीके बड़ी संख्या में भी विफल हो जाते हैं!
अनवर

11111111111111111.222222222222222इनपुट के रूप में, पहला शो 1.11और दूसरा एक शो1.11111111111111e+16
अनवर

1
हाँ आप सही हैं ... एक बार सामने या ऊपर के 16 स्थानों पर। अतिप्रवाह मुद्दा। बड़ी संख्या के साथ काम करने पर बड़े दशमलव के लिए सबसे अच्छा छड़ी। टाइपकास्टिंग समस्या पेश करता है
rorykoehler

-5

इसे इस्तेमाल करे:

module Util
module MyUtil



    def self.redondear_up(suma,cantidad, decimales=0)

        unless suma.present?
            return nil
        end


        if suma>0
            resultado= (suma.to_f/cantidad)
            return resultado.round(decimales)
        end


        return nil


    end

end 
end 

3
जवाब के लिए धन्यवाद। क्या आप कृपया इसे अंग्रेजी में संशोधित कर सकते हैं, क्योंकि यह प्रश्न अंग्रेजी में पूछा गया था।
Jared

Puedes traducir tu respuesta एक inglés? Preguntas y respuestas en Español deben existir Aqui
अंतर्मुखी

-15

एक दशमलव को छोटा करने के लिए मैंने अनुसरण कोड का उपयोग किया है:

<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
    <% if prom == 0 or total == 0 %>
        N.E.
    <% else %>
        <%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
    <% end %>
        <%#= prom/total %>
</th>

यदि आप 2 दशमलव तक कम करना चाहते हैं, तो आपको उपयोग करना चाहिए Integr(a*100)*0.01


5
प्रतिशत की कास्टिंग करते समय किसी को भी यह नहीं करना चाहिए। यह वास्तव में खराब रूप है क्योंकि ट्रंक करने से आप निकटतम 2 दशमलव पदों पर ठीक से घूमने की क्षमता को ढीला कर देते हैं। यानी 0.455 अगर आप सिर्फ ट्रंकटेट करते हैं तो आपको 0.45 मिलता है जो गोलाई के लिए गलत है क्योंकि इसका परिणाम 0.46 होना चाहिए। कभी भी दशमलव को न काटें हमेशा संख्या को गोल करें अन्यथा परिणाम गलत होगा जब राउंड अप ऑयंट करना होगा।
गुगुरु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.