The if( ) function can take both a "then" part (which you have used) and an "else" part which is the third parameter.
So if you write:
if( [Discount %] > 0 , [Discount %] , 0 )
It will give 0 in discount if the discount is less or equal to 0. By not including the else part it will return a NULL value which will make the entire calculation into a NULL which displays as a dash in the user interface just like you experience.