web-dev-qa-db-fra.com

obtenir une fraction d'un nombre décimal

J'essaie d'obtenir une fraction d'un nombre décimal dans Rails. Par exemple, j'ai un numéro, "1.23" et je veux obtenir "23". C'est peut-être trop facile, mais est-ce que quelqu'un a une idée de comment puis-je faire?

22
yagmurdursun

Je ne suis pas sûr que ce soit le moyen le plus simple de le faire - mais vous pouvez simplement fractionner le nombre en utilisant "." caractère - comme ceci:

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

Essayez d'utiliser la méthode modulo:

1.23.modulo(1) => 0.23

Lisez plus ici: http://www.Ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo

Vous pouvez également convertir float en entier et le soustraire de la valeur float d'origine.

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

Recommandé lire http://floating-point-gui.de/

8
Jonas Elfström

Pour choisir la solution appropriée, vous devez comprendre le type avec lequel vous travaillez. Si vos valeurs sont Float (le type standard pour les nombres non entiers en Ruby), des réponses logiquement correctes telles que mod(1) peuvent produire des résultats inattendus en raison de erreurs en virgule flottante . Dans tous les cas où Float est le type de données approprié à utiliser en premier lieu, cela est probablement acceptable.

Si les erreurs en virgule flottante sont pas acceptables, n'utilisez pas Float! Ruby est livré avec le grand BigDecimal class qui est beaucoup plus précis au détriment des performances et dont la syntaxe est légèrement plus détaillée.

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

si vous connaissez la précision souhaitée, la solution pourrait être un peu plus rapide.

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

Après avoir tout essayé ... Je pense que la meilleure réponse est (num - num.to_i).abs car cela fonctionne également pour les nombres négatifs.

par exemple.

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

(-1.23 - -1.23.to_i) .abs = 0.23

0
slindsey3000

... "1,23" et je veux obtenir "23".

Supprimez simplement la partie entière et multipliez par 100.

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