Шаблон "\u00A4#;-\u00A4#"
удовлетворяет вашим первым двум требованиям. Третий, AFAIK, не может быть удовлетворен простым шаблоном.
Вы можете использовать простой файл amount.tag, выполнив следующие действия:
<c:if test="${value != 0}>
<fmt:formatNumber value="${value}" pattern="\u00A4#;-\u00A4#"/>
</c:if>
Обратите внимание, что не отображать что-либо для 0 немного странно, поскольку любое значение от 0 до 0,5 будет отображаться как $ 0 из-за округления в любом случае.