Подтвердить что ты не робот

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

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

т.е.

  • 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')
4b9b3361

Ответ 1

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

"%gx" % (factor / 100.00)

Ответ 2

Вы можете смешивать и сопоставлять% g и% f так:

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

Ответ 3

Если вы используете рельсы, вы можете использовать методы NumberHelper рельсов: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html

number_to_human(a, precision: 6, strip_insignificant_zeros: true)

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

Ответ 4

Я закончил с

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

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

Ответ 5

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

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

Ответ 6

Здесь другой способ:

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

Или как приятный однострочный:

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

Ответ 7

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

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

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

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