Mostra il punto decimale solo se il componente in virgola mobile non è .00 sprintf / printf

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

  •  10-07-2019
  •  | 
  •  

Domanda

Sto piuttosto formattando un numero in virgola mobile ma voglio che appaia come un numero intero se non esiste un numero in virgola mobile rilevante.

cioè.

  • 1.20 - > 1.2x
  • 1.78 - > 1.78x
  • 0.80 - > 0.8x
  • 2,00 - > 2x

Posso ottenere questo con un po 'di regex ma mi chiedo se esiste un sprintf -solo modo per farlo?

Lo sto facendo piuttosto pigramente in ruby ??in questo modo:

("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
È stato utile?

Soluzione

Desideri utilizzare % g anziché % f :

"%gx" % (factor / 100.00)

Altri suggerimenti

Puoi combinare% g e% f in questo modo:

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

Se stai usando le rotaie, puoi usare i metodi NumberHelper delle rotaie: 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

Stai attento, perché precisione significa tutte le cifre dopo il punto decimale in questo caso.

Ho finito con

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

in questo modo ottieni anche numeri invece di stringhe

Mi sono appena imbattuto in questo, la correzione sopra non funzionava, ma mi è venuta in mente questa, che funziona per me:

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

Ecco un altro modo:

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

O come un bel one-liner:

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

Facile con Rails: http: // api .rubyonrails.org / classes / ActionView / Helpers / NumberHelper.html # metodo-i-number_with_precision

number_with_precision(value, precision: 2, significant: false, strip_insignificant_zeros: true)

Stavo cercando una funzione per troncare (non approssimativo) un float o un numero decimale in Ruby on Rails, ho trovato la seguente soluzione per farlo:

voi ragazzi potete provare nella vostra console, l'esempio:

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

Spero che aiuti qualcuno. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top