Как вы обходите поплавок с точностью до двух знаков после запятой в jruby

JRuby 1.6.x. Как объединить поплавок с десятичными знаками в jruby.

number = 1.1164
number.round(2)

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

Как объединить это число с двумя десятичными знаками?

Ответ 1

Float # round может принимать параметр в Ruby 1.9, а не в Ruby 1.8. JRuby по умолчанию - 1,8, но он способен работать в режиме 1.9.

Ответ 2

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

Ответ 3

sprintf('%.2f', number) является загадочным, но очень мощным способом форматирования чисел. Результат всегда является строкой, но, поскольку вы округляете, я предполагаю, что вы делаете это для целей презентации в любом случае. sprintf может форматировать любое число почти так, как вам нравится, и многое другое.

Полная документация sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf

Ответ 4

Изменить

После получения обратной связи кажется, что оригинальное решение не работает. Вот почему обновил ответ в качестве одного из предложений.

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. Надеюсь, что это поможет кому-то.

Ответ 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 

Ответ 6

чтобы усечь десятичное число, я использовал следующий код:

<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