it-roy-ru.com

получить дробную часть десятичного числа

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

22
yagmurdursun

Я не уверен, что это самый простой способ сделать это, но вы можете просто разделить число, используя «». характер - вот так:

number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
9
EfratBlaier

Попробуйте использовать метод по модулю:

1.23.modulo(1) => 0.23

Подробнее читайте здесь: http://www.Ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo

Или вы можете преобразовать число с плавающей точкой в ​​целое число и вычесть его из исходного значения с плавающей точкой.

1.23 - 1.23.to_i => 0.23
48
Eugene Dorian
n = 1.23

n.modulo(1)
=> 0.22999999999999998

n - n.to_i
=> 0.22999999999999998

Рекомендуем прочитать http://floating-point-gui.de/

8
Jonas Elfström

Выбор правильного решения требует понимания типа, с которым вы работаете. Если ваши значения равны Float (стандартный тип для нецелых чисел в Ruby), то логически правильные ответы, такие как mod(1), могут привести к неожиданным результатам из-за ошибок с плавающей запятой . Для любого случая, когда Float - это правильный тип данных, который будет использоваться в первую очередь, это, вероятно, приемлемо.

Если ошибки с плавающей запятой не приемлемы, не используйте Float! Ruby поставляется с отличным классом BigDecimal , который гораздо более точен за счет производительности и немного более подробного синтаксиса.

decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
4
bloudermilk

если вы знаете желаемую точность, это может быть немного быстрее для решения to_s. 

1.1234.modulo(1).round(4) #0.1234
3
bioffe
 a=1.23 #value of a will be 1.23
 a=a-a.to_i #value of a will be 0.23
1
dsk

Попробовав все ... Я чувствую, что лучшим ответом является (num - num.to_i).abs, потому что он также работает для отрицательных чисел.

например 

(1.23 - 1.23.to_i) .abs = 0,23

(-1.23 - -1.23.to_i) .abs = 0,23

0
slindsey3000

... "1.23" и я хочу получить "23".

Просто удалите целую часть и умножьте на 100.

((number - number.to_i) * 100).to_i
0
Lucas Castro