Afficher uniquement le point décimal si le composant à virgule flottante n'est pas .00 sprintf / printf

StackOverflow https://stackoverflow.com/questions/838064

  •  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')
Était-ce utile?

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. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top