Показывать десятичную точку только в том случае, если компонент с плавающей запятой не равен .00 sprintf / printf - PullRequest
39 голосов
/ 08 мая 2009

Я довольно форматирую число с плавающей запятой, но хочу, чтобы оно отображалось как целое число, если нет соответствующего числа с плавающей запятой.

* 1003 Т.е. *

  • 1,20 -> 1,2x
  • 1,78 -> 1,78x
  • 0,80 -> 0,8x
  • 2,00 -> 2x

Я могу достичь этого с помощью небольшого количества регулярных выражений, но мне интересно, есть ли sprintf -только способ сделать это?

Я делаю это довольно лениво в рубине, вот так:

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

Ответы [ 8 ]

48 голосов
/ 08 мая 2009

Вы хотите использовать %g вместо %f:

"%gx" % (factor / 100.00)
27 голосов
/ 09 марта 2012

Вы можете смешивать и сочетать% g и% f следующим образом:

"%g" % ("%.2f" % number)
18 голосов
/ 03 сентября 2013

Если вы используете rails, вы можете использовать методы NumberHelper для 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

Будьте осторожны, потому что точность означает все цифры после десятичной точки в этом случае.

6 голосов
/ 02 октября 2014

Я закончил с

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

таким образом, вы даже получаете числа вместо строк

3 голосов
/ 30 мая 2013

Вот еще один способ:

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

Или как хороший однострочный:

"%.#{x.truncate.to_s.size + 2}g" % x
3 голосов
/ 23 августа 2010

Я только что столкнулся с этим, исправление выше не сработало, но я придумал это, которое работает для меня:

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
2 голосов
/ 15 мая 2018

Легко с Рельсами: 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)
0 голосов
/ 16 января 2014

Я искал функцию для усечения (не приблизительного) числа с плавающей запятой или десятичного числа в Ruby on Rails, я нашел следующее решение для этого:

вы, ребята, можете попробовать в своей консоли, пример:

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

Надеюсь, это кому-нибудь поможет. : -)

...