Afficher uniquement le point décimal si le composant à virgule flottante n'est pas .00 sprintf / printf
-
10-07-2019 - |
Question
Je suis en train de formater un nombre à virgule flottante, mais je souhaite qu'il apparaisse comme un entier s'il n'y a pas de nombre à virgule flottante pertinent.
I.e.
- 1,20 - > 1.2x
- 1,78 - > 1,78x
- 0,80 - > 0,8x
- 2,00 - > 2x
Je peux y arriver avec un peu de regex, mais je me demande s'il existe un moyen de sprintf
:
Je le fais plutôt paresseusement en rubis comme ceci:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
La solution
Vous souhaitez utiliser % g
au lieu de % f
:
"%gx" % (factor / 100.00)
Autres conseils
Vous pouvez mélanger et faire correspondre% g et% f comme suit:
"%g" % ("%.2f" % number)
Si vous utilisez des rails, vous pouvez utiliser les méthodes NumberHelper de rails: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper. html
number_with_precision(13.001, precision: 2, strip_insignificant_zeros: true)
# => 13
number_with_precision(13.005, precision: 2, strip_insignificant_zeros: true)
# => 13.01
Faites attention, car précision signifie tous les chiffres après le point décimal, dans ce cas.
je me suis retrouvé avec
price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f
De cette façon, vous obtenez même des chiffres au lieu de chaînes
Je viens de découvrir ceci, le correctif ci-dessus n'a pas fonctionné, mais j'ai trouvé ceci qui fonctionne pour moi:
def format_data(data_element)
# if the number is an in, dont show trailing zeros
if data_element.to_i == data_element
return "%i" % data_element
else
# otherwise show 2 decimals
return "%.2f" % data_element
end
end
Voici un autre moyen:
decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x
Ou comme un beau one-liner:
"%.#{x.truncate.to_s.size + 2}g" % x
Facile avec Rails: http: // api .rubyonrails.org / classes / ActionView / Helpers / NumberHelper.html # method-i-number_with_precision
number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)
Je recherchais une fonction permettant de tronquer (non approximativement) un nombre à virgule flottant ou décimal dans Ruby on Rails, je découvre la solution suivante pour le faire:
vous pouvez essayer dans votre console, par exemple:
>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8
J'espère que ça aide quelqu'un. : -)