Получить долю части десятичного числа - программирование
Подтвердить что ты не робот

Получить долю части десятичного числа

Я пытаюсь получить часть части десятичного числа в рельсах. Например, у меня есть номер, который "1.23", и я хочу получить "23". Возможно, это слишком легко, но есть ли у кого-нибудь представление о том, как я могу это сделать?

4b9b3361

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