Мне нужна помощь в форматировании процентов. Моя первоначальная причина форматирования заключается в том, что я хочу отображать проценты около нуля как 0,05%, а не как 0,05%.
Итак, я сделал это:
IF (a.TOTAL <> 0 AND b.mkt <> 0) THEN
v_perc := TO_CHAR(ROUND(100-( a.TOTAL*100/ b.mkt),2),'00.99') || '%';
END IF;
v_perc хранится как varchar2(50), но форматирование не всегда такое, как мне нужно.
Когда процент ниже 10%. Я получаю 08,52 или 00,35%. Но мне нужен формат, в котором на выходе получается 0,52%, 5,32%, 55%, 0%, 100%. Я пробовал с 000.999, но это даст 000.000%.


Ты можешь использовать
TO_CHAR(<your_value>,'fm990D00','NLS_NUMERIC_CHARACTERS = ''.,''')
как ваша модель форматирования.
Он удовлетворяет ваши потребности вплоть до 100 (100%). Помимо процента, если вам нужно больше цифр в другом случае, таком как 11,115.54, вы можете преобразовать второй аргумент в 'fm999G990D00'.
@karthikadiga пытается объяснить, насколько я понял, всякий раз, когда <your_value> равно 8.5, вам нужно 'fm990D00' для преобразования в 8.50, 'fm990D0000' для преобразования в 8.5000. То есть для конвертации нужен to_char, иначе он стоит как 8.5.
@karthikadiga хм Хорошо, вы можете объявить perc как number(10,2), number или float.
Привет, у меня есть еще одно сомнение. Если мне нужно отобразить то же самое для столбца с числовым типом данных (удалив добавление части «%» в приведенной выше формуле), каким должен быть тип данных и формула, я попробовал десятичный (5, 2) и десятичный (5,4), но когда я удаляю формат точара, упомянутый в приведенном выше решении, и пробовал различные форматы, но это не дает решения, как указано выше, пожалуйста, помогите