আপনি কীভাবে জুরবীতে দুটি দশমিক স্থানে ভাসাবেন


172

জেআরবি 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.8 এ, তবে এটি 1.9 মোডে চলতে সক্ষম ।


1
আমি জানি মুদ্রার মতো কিছু উপস্থাপনের উদ্দেশ্যে স্যামের সংখ্যাটি গোল করার উদ্দেশ্যটি মনে হয় না, তবে সচেতন হন যে # পার্শ্ব (যথার্থতা) ব্যবহার করা উদ্দেশ্য হিসাবে কাজ করবে না যদি আপনি এটি করার চেষ্টা করছেন (3) .গ্রাউন্ড (2) # => 3.0, 3.00 নয়)। এটি পেতে, নীচের থিওর দ্বারা উত্তরটি দেখুন।
জ্যারেডস্মিথ

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

12
(5.6).round(2)ফিরে আসছেন মাত্র 5.6
বালা কার্তিক

3
যুক্তিসঙ্গত বলে মনে হচ্ছে, অতিরিক্ত শূন্য স্থানধারকটি এখনও আছে, এটি কেবল দৃশ্যমান নয়
বোল্ডার_রবি

@ বালাকার্থিক এই কারণেই আমি থিওর দ্বারা সমাধানটি ব্যবহার করছি। এটি সঠিকভাবে বৃত্তাকারে (যদি আপনি কোনও অদ্ভুত কারণে 3 দশমিক পেরিয়ে যাচ্ছেন তবে মন্তব্যগুলি দেখুন), সুতরাং যদি আপনি স্ট্রিং আউটপুট সন্ধান করেন তবে এটিই আরও ভাল সমাধান।
ডিলান ভ্যান্ডার বার্গ

এটা ঠিক। আমি প্রজন্মের এলোমেলো অক্ষাংশ এবং দ্রাঘিমাংশ ছিলাম তাই আমি 6 সংখ্যার জন্য নম্বর (রাউন্ড) ব্যবহার করি
gsumk

199

sprintf('%.2f', number)সংখ্যাগুলি বিন্যাস করার একটি ক্রিপ্টিক, তবে খুব শক্তিশালী উপায়। ফলাফলটি সর্বদা একটি স্ট্রিং, তবে আপনি গোলাকার হওয়ায় আমি ধরে নিই যে আপনি যেভাবেই উপস্থাপনের উদ্দেশ্যে এটি করছেন। sprintfআপনার পছন্দ মতো যে কোনও সংখ্যা ফর্ম্যাট করতে পারে এবং আরও অনেক কিছু।

সম্পূর্ণ স্প্রিন্টফ ডকুমেন্টেশন: http://www.ruby-doc.org/core-2.0.0/Kernel.html# মেমোথড- আই-স্প্রিন্টফ


79
'%.2f' % numberকমপক্ষে আমার অভিজ্ঞতাতেও কাজগুলি বেশি দেখা যায়।
মাইকেল কোহল

6
@MichaelKohl রুবি শৈলী গাইড নিতেন sprintf(অথবা format) উপর %সংস্করণ। এর জন্য কিছু যুক্তি এখানে আলোচনা করা হয়েছে , এটি বেশিরভাগই পঠনযোগ্যতার বিষয়ে। এমন নয় যে আমাদের সকলকে স্টাইল গাইড অনুসরণ করতে হবে, কেবল কিছু কারণ প্রদান করে :)
লুসি বাইন

3
নোট করুন যে তৃতীয় দশমিকের পরে, স্প্রিন্টফের রাউন্ড আপ 6 নয়, 5 এর উপরে নয়, উদাহরণস্বরূপ, স্প্রিন্টফ ("%। 3f", 1.2225) "1.222", স্প্রিন্টফ ("%। 3f", 1.2226) হবে "1.223" ", যদি এটি আপনার কাছে গুরুত্বপূর্ণ হয় তবে # রাউন্ড
ইকোডিং 5

তবে 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 টি জায়গা। ওভারফ্লো ইস্যু। বড় সংখ্যার সাথে কাজ করা হলে সেরা কাঠি থেকে বড় দশমিক। টাইপকাস্টিং সমস্যার পরিচয় দেয়
ররিকোহিলার

-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
উত্তর করার জন্য ধন্যবাদ. ইংরেজিতে যেমন প্রশ্ন করা হয়েছিল, আপনি কি দয়া করে এটি ইংরেজী হতে সংশোধন করতে পারেন?
জেয়ার্ড

আপনি কি রেজিস্ট্রেশন একটি ট্রেডিং? Preguntas Y respuestas en Español দেবেন 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 হওয়া উচিত should দশমিকের সর্বদা সংখ্যাকে কখনই কেটে ফেলবেন না অন্যথায় ফলাফলটি ভুল হবে যখন গোল করতে হবে তখন অবশ্যই ocurr হবে।
গুগারু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.