답변:
Float # round는 Ruby 1.8이 아니라 Ruby 1.9에서 매개 변수를 사용할 수 있습니다. JRuby의 기본값은 1.8이지만 1.9 모드에서 실행할 수 있습니다 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
5.6 만 반환
sprintf('%.2f', number)
숫자를 형식화하는 매우 강력하지만 강력한 방법입니다. 결과는 항상 문자열이지만 반올림하기 때문에 어쨌든 프레젠테이션을 위해 수행한다고 가정합니다. 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>
소수점 이하 2 자리로 자르려면 다음을 사용해야합니다. Integr(a*100)*0.01