2017-06-08 3 views
0

Existe-t-il un moyen de définir une précision pour tous les nombres BigDecimal dans Ruby on Rails?Définir la précision pour toutes les grandes décimales dans Ruby on Rails

Je setted la précision en utilisant la méthode limit, mais cela ne semblait pas travailler:

irb(main):003:0> BigDecimal.limit 
=> 25 

irb(main):004:0> num = '0.' + 0.to_s * 30 + '1' 
=> "0.0000000000000000000000000000001" 

irb(main):005:0> decimal = BigDecimal(num) 
=> #<BigDecimal:9614780,'0.1E-30',9(45)> 

irb(main):006:0> puts decimal.to_s 
0.0000000000000000000000000000001 
=> nil 

irb(main):007:0> BigDecimal.limit 
=> 25 

Est-ce que j'ai mal compris l'utilisation de la méthode limit? Y a-t-il un autre qui peut réaliser ce que je veux?

L'application utilise Ruby et Rails 2.3.44.2.8

Disclaimer: Je sais déjà comment tronquer et comment définir que la précision des valeurs individuelles. J'ai vraiment besoin d'un moyen de définir ce "globalement" (je veux dire, pour tous les nouveaux Big Decimals que j'instancie ou manipule).

+0

Que voulez-vous dire par * "mode global" *? – Pavan

+1

'limite' est de faible priorité et ne semble pas correspondre directement au nombre stocké. C'est parce que * "La limite spécifiée par cette méthode prend moins de priorité sur toute limite spécifiée aux méthodes d'instance telles que ceil, floor, truncate ou round." * [Docs] (https://ruby-doc.org/stdlib- 2.1.5/libdoc/bigdecimal/rdoc/BigDecimal.html # method-c-limit) cela permet à la "limite" d'être de 1 mais vous pouvez arrondir autant de chiffres que vous le souhaitez – engineersmnky

+0

@Pavan J'aimerais pour définir la précision quelque part et s'assurer que c'est pareil pour toute l'application. Par exemple: si j'obtiens/instancie un nouveau BigDecimal à partir d'une requête, je voudrais travailler avec une précision plus petite avant de le persister sur le DB –

Répondre

-1

Vous pouvez

2.1.7 :056 > num = '0.' + 0.to_s * 30 + '1' 
=> "0.0000000000000000000000000000001" 
2.1.7 :057 > decimal = BigDecimal(num) 
=> #<BigDecimal:7be2178,'0.1E-30',9(45)> 
2.1.7 :058 > puts decimal.to_s 
0.0000000000000000000000000000001 
=> nil 
2.1.7 :059 > '%.2f' % decimal 
=> "0.00" 
+0

J'ai besoin d'un moyen de définir pour tous les BigDecimals, pas seulement un à la fois :(Désolé –

+0

Si c'est pour une colonne dans la DB, vous pouvez essayer de le définir dans la migration: décimal,: précision => 5,: scale => 2 Essayez aussi http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html – Akshay