mostrar apenas ponto decimal se o componente de ponto flutuante não é .00 sprintf / printf

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

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu estou bonito formatação de um número de ponto flutuante, mas quer que ele apareça como um número inteiro, se não houver número de ponto flutuante relevante.

i.

  • 1.20 -> 1,2x
  • 1,78 -> 1.78x
  • 0.80 -> 0,8x
  • 2,00 -> 2x

posso conseguir isso com um pouco de regex, mas querendo saber se existe uma maneira só de sprintf de fazer isso?

Estou fazendo isso em vez preguiçosamente em ruby ??assim:

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

Solução

Você quer usar %g vez de %f:

"%gx" % (factor / 100.00)

Outras dicas

Você pode misturar e combinar% g e% f assim:

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

Se você estiver usando trilhos, você pode usar métodos do helper Number trilhos: 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

Tenha cuidado, porque a precisão significa todos os dígitos após o ponto decimal, neste caso.

acabei com

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

Desta forma, você mesmo obter números em vez de cordas

Eu deparei com isso, a correção acima não funcionavam, mas eu vim com isso, o que funciona para mim:

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

Aqui está outra maneira:

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

Ou como um one-liner agradável:

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

fácil com Rails: http: // api .rubyonrails.org / classes / ActionView / Helpers / NumberHelper.html # método-i-number_with_precision

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

Eu estava procurando por uma função para truncar (não aproximado) uma bóia ou número decimal em Ruby on Rails, eu descobrir a solução follow fazer isso:

Você caras pode tentar em seu console, o exemplo:

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

Espero que ajude alguém. : -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top