Я пытаюсь получить часть части десятичного числа в рельсах. Например, у меня есть номер, который "1.23", и я хочу получить "23". Возможно, это слишком легко, но есть ли у кого-нибудь представление о том, как я могу это сделать?
Получить долю части десятичного числа
Ответ 1
Я не уверен, что это самый простой способ сделать это, но вы можете просто разделить число, используя ".". character - вот так:
number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
Ответ 2
Попробуйте использовать метод modulo:
1.23.modulo(1) => 0.23
Подробнее здесь: http://www.ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo
Или вы можете преобразовать float в integer и вычесть его из исходного значения float.
1.23 - 1.23.to_i => 0.23
Ответ 3
n = 1.23
n.modulo(1)
=> 0.22999999999999998
n-n.to.i
=> 0.22999999999999998
Рекомендуем читать http://floating-point-gui.de/
Ответ 4
если вы знаете свою желаемую точность, это может быть чуть быстрее для решения to_s.
1.1234.modulo(1).round(4) #0.1234
Ответ 5
Решение о правильном решении требует понимания того типа, с которым вы работаете. Если ваши значения Float (стандартный тип для не целого числа в Ruby), то логически исправлять ответы, такие как mod(1)
, могут привести к неожиданным результатам из-за ошибок с плавающей запятой. В любом случае, когда Float является правильным типом данных, который должен использоваться в первую очередь, это, вероятно, допустимо.
Если ошибки с плавающей запятой неприемлемы, не используйте Float
! Ruby поставляется с отличным BigDecimal
классом, который намного точнее за счет производительности и немного более подробного синтаксиса.
decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
Ответ 6
a=1.23 #value of a will be 1.23
a=a-a.to_i #value of a will be 0.23
Ответ 7
Пробуя все... Я считаю, что лучший ответ (num - num.to_i).abs
, потому что он также работает для отрицательных чисел.
например.
(1.23 - 1.23.to_i).abs = 0.23
(- 1.23 - -1.23.to_i).abs = 0.23