Відповіді:
Float # round може приймати параметр у Ruby 1.9, а не у Ruby 1.8. JRuby за замовчуванням до 1,8, але він може працювати в режимі 1.9 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
повертається лише 5.6
sprintf('%.2f', number)
- це загадковий, але дуже потужний спосіб форматування чисел. Результат - це завжди рядок, але оскільки ви округляєте, я вважаю, що ви все одно це робите для презентації. sprintf
Ви можете форматувати будь-яке число майже будь-яким способом, який вам подобається, та багато іншого.
Повна документація на sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
також твори частіше спостерігаються, принаймні з мого досвіду.
sprintf
(або format
) над %
версією. Деякі міркування для цього обговорюються тут , здебільшого йдеться про читабельність. Не те, що всі ми повинні слідувати керівництву стилю, лише наводячи деякі причини :)
0.566666666666666
раунди до0.57
"%.2f"
округлює 5
вниз, а не вгору, чи є спосіб це виправити?
Отримавши відгук, схоже, що оригінальне рішення не спрацювало. Ось чому оновлено відповідь як одну з пропозицій.
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
. Сподіваюся, це комусь допоможе
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
11111111111111111.222222222222222
як вхідний показ, перший показ, 1.11
а другий показ1.11111111111111e+16
Спробуйте це:
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
щоб урізати десятковий я використав наступний код:
<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>
Якщо ви хочете скоротити до двох десятків, вам слід скористатися Integr(a*100)*0.01