Показывать десятичную точку только в том случае, если компонент с плавающей запятой не равен .00 sprintf/printf
-
10-07-2019 - |
Вопрос
Я довольно хорошо форматирую число с плавающей запятой, но хочу, чтобы оно отображалось как целое число, если нет соответствующего числа с плавающей запятой.
То есть.
- 1.20 -> 1.2x
- 1.78 -> 1.78x
- 0,80 -> 0,8 x
- 2.00 -> 2x
Я могу достичь этого с помощью небольшого количества регулярных выражений, но интересно, есть ли sprintf
- единственный способ сделать это?
Я делаю это довольно лениво в ruby вот так:
("%0.2fx" % (factor / 100.0)).gsub(/\.?0+x$/,'x')
Решение
Вы хотите использовать %g
вместо того , чтобы %f
:
"%gx" % (factor / 100.00)
Другие советы
Вы можете смешивать и сочетать %g и %f следующим образом:
"%g" % ("%.2f" % number)
Если вы используете rails, вы можете использовать методы rails 'NumberHelper: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
Будьте осторожны, потому что точность в данном случае означает все цифры после запятой.
В итоге я получил
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
Легко с Рельсами: 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)
Я искал функцию для усечения (не приблизительного) числа с плавающей запятой или десятичного числа в Ruby on Rails, я нашел следующее решение для этого:
вы, ребята, можете попробовать в своей консоли, например:
>> a=8.88
>> (Integer(a*10))*0.10
>> 8.8
Я надеюсь, что это кому-нибудь поможет.:-)