2011-05-10 13 views
13

रूबी में, मैं कैसे कर सकते हैं:मैं एक दशमलव को 0 दशमलव स्थानों तक विभाजित करने और गोल करने के लिए कैसे सेट कर सकता हूं?

number_total = records/per_page 

जहां per_page = 100, और records = 1050, और फिर ऊपर दौर इसलिए कोई दशमलव कर रहे हैं? तो, 10.5 के बजाय यह 11 बराबर है?

उत्तर

21

संपादित एक टिप्पणी निम्नलिखित

number_total = (records/per_page.to_f).ceil 
+0

छत या गोल? whcih सही है? thxs – AnApprentice

+1

आप '1.1' के लिए क्या चाहते हैं? यह उस पर निर्भर करता है। '1' या' 2'? – sawa

+0

1.1 के लिए मैं चाहता हूं कि 2 – AnApprentice

0

यहाँ आता है सब बुराई की जड़: एक समय से पहले ही अनुकूलित विधि:

class Integer 
    # returns quotient's ceiling integer 
    def div_ceil(divisor) 
    q = self/divisor 
    if self % divisor > 0 
     return q + 1 
    else 
     return q 
    end 
    end 
end 

निम्नलिखित बेंचमार्क कोड:

require 'benchmark' 

$a = 1050 
$b = 100 

def float_op 
    ($a/$b.to_f).ceil 
end 

def integer_op 
    q = $a/$b 
    if $a % $b > 0 
    return q + 1 
    else 
    return q 
    end 
end 

n = 1000000 
Benchmark.bm do |x| 
    x.report { n.times do; float_op; end } 
    x.report { n.times do; integer_op; end } 
end 

मुझे देता है यह परिणाम

 user  system  total  real 
    0.160000 0.000000 0.160000 ( 0.157589) 
    0.130000 0.000000 0.130000 ( 0.133821) 
1

@ लुलाला सभी बुराई का एक और रूट: चेरी-पिकिंग परिणाम।

अपने बेंचमार्क को कई बार चलाएं। मैं निम्नलिखित मिल:

 user  system  total  real 
    0.120000 0.000000 0.120000 ( 0.119281) 
    0.120000 0.000000 0.120000 ( 0.123431) 

कौन सा एक टाई है।

 user  system  total  real 
    0.110000 0.000000 0.110000 ( 0.118602) 
    0.130000 0.000000 0.130000 ( 0.127195) 

जो बताता है कि float_op तेज है।

 user  system  total  real 
    0.150000 0.000000 0.150000 ( 0.151104) 
    0.120000 0.000000 0.120000 ( 0.123836) 

जो बताता है कि integer_op हमें तेज़ी से बताता है।

संबंधित मुद्दे