반응형
루비: 루비의 라운딩 플로트
라운딩에 문제가 있어요.저는 소수점의 100분의 1로 반올림하고 싶은 부유물을 가지고 있습니다.하지만, 나는 오직 사용할 수 있습니다..round
그것은 기본적으로 그것을 int, 즉 의미로 바꿉니다.2.34.round # => 2.
다음과 같은 것을 할 수 있는 간단한 효과적인 방법이 있습니까?2.3465 # => 2.35
반올림할 소수 자릿수를 포함하는 반올림으로 인수 전달
>> 2.3465.round
=> 2
>> 2.3465.round(2)
=> 2.35
>> 2.3465.round(3)
=> 2.347
표시할 때 사용할 수 있습니다(예:
>> '%.2f' % 2.3465
=> "2.35"
동그랗게 저장하고 싶다면,
>> (2.3465*100).round / 100.0
=> 2.35
당신은 이것을 프리즌으로 반올림하는 데 사용할 수 있습니다.
//to_f is for float
salary= 2921.9121
puts salary.to_f.round(2) // to 2 decimal place
puts salary.to_f.round() // to 3 decimal place
Float 클래스에 메서드를 추가할 수 있습니다. 스택 오버플로에서 이를 배웠습니다.
class Float
def precision(p)
# Make sure the precision level is actually an integer and > 0
raise ArgumentError, "#{p} is an invalid precision level. Valid ranges are integers > 0." unless p.class == Fixnum or p < 0
# Special case for 0 precision so it returns a Fixnum and thus doesn't have a trailing .0
return self.round if p == 0
# Standard case
return (self * 10**p).round.to_f / 10**p
end
end
인수로 음수를 제공할 수도 있습니다.round
10, 100 등의 가장 가까운 배수로 반올림하는 방법.
# Round to the nearest multiple of 10.
12.3453.round(-1) # Output: 10
# Round to the nearest multiple of 100.
124.3453.round(-2) # Output: 100
어때(2.3465*100).round()/100.0
?
def rounding(float,precision)
return ((float * 10**precision).round.to_f) / (10**precision)
end
표시만 해주시면 number_with_precision 도우미를 사용하겠습니다.스티브 위트가 지적했듯이, 만약 당신이 그것이 다른 곳에서 필요하다면 제가 사용할 것입니다.round
방법
루비 1.8.7의 경우 코드에 다음을 추가할 수 있습니다.
class Float
alias oldround:round
def round(precision = nil)
if precision.nil?
return self
else
return ((self * 10**precision).oldround.to_f) / (10**precision)
end
end
end
언급URL : https://stackoverflow.com/questions/2054217/ruby-rounding-float-in-ruby
반응형
'programing' 카테고리의 다른 글
다른 최적화 수준이 기능적으로 다른 코드로 이어질 수 있습니까? (0) | 2023.07.19 |
---|---|
LOCAL, BASE 또는 REMOTE 중 최종적으로 사용될 Git 파일의 버전은 무엇입니까? (0) | 2023.07.14 |
MongoDB 스토리지 크기 제한? (0) | 2023.07.14 |
하위 프로세스가 종료될 때까지 기다리는 방법 (0) | 2023.07.14 |
리눅스에서 파이프를 닫아야 하는 이유는 무엇입니까? (0) | 2023.07.14 |