Mostrar solo el punto decimal si el componente de coma flotante no es .00 sprintf / printf

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

  •  10-07-2019
  •  | 
  •  

Pregunta

Estoy formateando un número de coma flotante pero quiero que aparezca como un número entero si no hay un número de coma flotante relevante.

I.e.

  • 1.20 - > 1.2x
  • 1.78 - > 1.78x
  • 0.80 - > 0.8x
  • 2.00 - > 2x

Puedo lograr esto con un poco de expresión regular pero preguntándome si hay una sprintf -sólo una forma de hacerlo.

Lo estoy haciendo bastante perezosamente en rubí así:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
¿Fue útil?

Solución

Desea utilizar % g en lugar de % f :

"%gx" % (factor / 100.00)

Otros consejos

Puede mezclar y combinar% g y% f así:

"%g" % ("%.2f" % number)

Si está usando rieles, puede usar los métodos 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

Tenga cuidado, porque la precisión significa todos los dígitos después del punto decimal en este caso.

Terminé con

price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f

de esta manera incluso obtienes números en lugar de cadenas

Acabo de encontrar esto, la solución anterior no funcionó, pero se me ocurrió esto, que funciona para mí:

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

Aquí hay otra forma:

decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x

O como una buena frase:

"%.#{x.truncate.to_s.size + 2}g" % x

Fácil con rieles: 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)

Estaba buscando una función para truncar (no aproximar) un número flotante o decimal en Ruby on Rails, descubrí la siguiente solución para hacer eso:

ustedes pueden probar en su consola, el ejemplo:

>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8

Espero que ayude a alguien. :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top