I want to know how correct is this? and will it do the calculation twice?
It's not a great pattern, it's likely that it will perform the calc twice and if [salePrice] is 0 or blank it will throw an error.
Is there any better way of doing it?
DAX has a DIVIDE() function and it's normally better to use this as it will deal with divide by 0 errors automatically and you could capture the expression in a variable to avoid calculating twice (if you are using SSAS 2017 or later)
Total count (60dg):=
var _expression = DIVIDE( [Rivers (60dg)], [salePrice] )
return if( _expression = 0, BLANK(), _expression )
Or, since logically the division can only be equal to 0 if the numerator is blank or zero you could just check that in your IF, then use the DIVIDE function to handle cases where [salePrice] is 0 or blank
Total count (60dg):=if([Rivers (60dg)] = 0, BLANK(), DIVIDE( [Rivers (60dg)], [salePrice]) )