Mam problemy z zaokrągleniem. Mam liczbę zmiennoprzecinkową, którą chcę zaokrąglić do setnej części dziesiętnej. Jednak mogę użyć tylko tego, .round
co w zasadzie zamienia go w int, co oznacza, 2.34.round # => 2.
czy istnieje prosty sposób na wykonanie czegoś takiego2.3465 # => 2.35
ruby-on-rails
ruby
rounding
user211662
źródło
źródło
sprintf '%.2f', 2.3465
również działa.2.3000.round(2) => 2.3
isprintf '%.2f', 2.300 => 2.30
. Moim zdaniem jest to błąd w round () lub powinien mieć opcję zachowania końcowych zer.2.3000.round(2)
to liczba, a nie ciąg. Nie ma możliwości, aby liczba2.3
była inna niż2.30
, więc nie ma możliwości zachowania zer kończących. Możesz stworzyć własną klasę liczb_z_znaczeniem, ale wtedy mamy już łańcuchy.'%.3f' % 1.2345
(3 miejsc po przecinku, a nie 2), jednak !! Sama dlasprintf
jak dobrze. Strzec się. To nie wróci=> 1.234
tak,=> 1.235
jak większość by się spodziewała (iow, po drugim miejscu po przecinku sprint zaokrągla 5 w dół i tylko zaokrągla 6 w górę). Dlatego powyższy komentarz Kit Ho ma ponad 25 głosów za. Bezpieczniejsze w użyciu,'%.3f' % 1.2345.round(3)
więc liczba jest odpowiednio zaokrąglana przez.round
pierwsze, a następnie formatowana (w razie potrzeby z końcowymi zerami).Przekaż argument do round zawierający liczbę miejsc dziesiętnych do zaokrąglenia
źródło
1.1.round(2)
=>1.1
nie1.10
możesz użyć tego do zaokrąglenia do dokładności.
źródło
Możesz dodać metodę w Float Class, nauczyłem się tego ze stackoverflow:
źródło
Możesz również podać liczbę ujemną jako argument
round
metody, aby zaokrąglić ją do najbliższej wielokrotności liczby 10, 100 i tak dalej.źródło
źródło
o czym
(2.3465*100).round()/100.0
?źródło
Jeśli chcesz go tylko wyświetlić, użyłbym pomocnika number_with_precision . Jeśli potrzebujesz go gdzie indziej, użyłbym, jak wskazał Steve Weet,
round
metodyźródło
number_with_precision
jest to metoda tylko dla Railsów.Dla ruby 1.8.7 możesz dodać do swojego kodu:
źródło