The correct way to do it when using Intl.NumberFormat is to set both maximumFractionDigits and minimumFractionDigits options in constructor while validating input value using a modulo % for a whole number (per https://stackoverflow.com/a/49724586/1362535 which is a CORRECT answer!). The accepted answer is sort of string manipulation.
const fraction = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
});
const formatter = new Intl.NumberFormat('en-NZ', {
style: 'currency',
currency: 'NZD',
minimumFractionDigits: 2,
});
let number = 4.1;
if(number % 1 == 0)
console.log(fraction.format(number));
else
console.log(formatter.format(number));
number = 4;
if(number % 1 == 0)
console.log(fraction.format(number));
else
console.log(formatter.format(number));