Ответ 1
Вы хотите использовать %g
вместо %f
:
"%gx" % (factor / 100.00)
Я довольно форматирую число с плавающей запятой, но хочу, чтобы он отображался как целое число, если нет соответствующего числа с плавающей запятой.
т.е.
Я могу добиться этого с помощью некоторого регулярного выражения, но задаюсь вопросом, существует ли способ sprintf
- только для этого?
Я делаю это довольно лениво в рубине, например:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
Вы хотите использовать %g
вместо %f
:
"%gx" % (factor / 100.00)
Вы можете смешивать и сопоставлять% g и% f так:
"%g" % ("%.2f" % number)
Если вы используете рельсы, вы можете использовать методы NumberHelper рельсов: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html
number_to_human(a, precision: 6, strip_insignificant_zeros: true)
Будьте осторожны, поскольку точность означает все цифры (числа до и после десятичной точки)
Я закончил с
price = price.round(precision)
price = price % 1 == 0 ? price.to_i : price.to_f
таким образом вы даже получаете числа вместо строк
Я только что наткнулся на это, исправление выше не работает, но я придумал это, что работает для меня:
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
Здесь другой способ:
decimal_precision = 2
"%.#{x.truncate.to_s.size + decimal_precision}g" % x
Или как приятный однострочный:
"%.#{x.truncate.to_s.size + 2}g" % x
Я искал функцию для усечения (не аппроксимации) числа с плавающей запятой или десятичного числа в Ruby on Rails, я выясню следующее решение:
вы, ребята, можете попробовать в консоли, пример:
>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8
Я надеюсь, что это поможет кому-то. : -)