Improve exposure compensation fraction formatting

This commit is contained in:
Sam Becker 2024-04-11 20:40:55 -05:00
parent 8ae8156957
commit 4e3d1dec08
2 changed files with 26 additions and 5 deletions

View File

@ -14,6 +14,7 @@ describe('EXIF', () => {
it('exposure compensation', () => { it('exposure compensation', () => {
expect(formatExposureCompensation(-1)).toBe('-1ev'); expect(formatExposureCompensation(-1)).toBe('-1ev');
expect(formatExposureCompensation(0)).toBe(undefined); expect(formatExposureCompensation(0)).toBe(undefined);
expect(formatExposureCompensation(0.25)).toBe('+1/4ev');
expect(formatExposureCompensation(0.33)).toBe('+1/3ev'); expect(formatExposureCompensation(0.33)).toBe('+1/3ev');
expect(formatExposureCompensation(0.333)).toBe('+1/3ev'); expect(formatExposureCompensation(0.333)).toBe('+1/3ev');
expect(formatExposureCompensation(0.5)).toBe('+1/2ev'); expect(formatExposureCompensation(0.5)).toBe('+1/2ev');
@ -22,8 +23,22 @@ describe('EXIF', () => {
expect(formatExposureCompensation(0.015625)).toBe('+1/64ev'); expect(formatExposureCompensation(0.015625)).toBe('+1/64ev');
expect(formatExposureCompensation(-0.015625)).toBe('-1/64ev'); expect(formatExposureCompensation(-0.015625)).toBe('-1/64ev');
expect(formatExposureCompensation(1)).toBe('+1ev'); expect(formatExposureCompensation(1)).toBe('+1ev');
expect(formatExposureCompensation(-1.33)).toBe('-1 1/3ev');
expect(formatExposureCompensation(1.33)).toBe('+1 1/3ev');
expect(formatExposureCompensation(1.333)).toBe('+1 1/3ev');
expect(formatExposureCompensation(1.3333)).toBe('+1 1/3ev');
expect(formatExposureCompensation(1.5)).toBe('+1 1/2ev'); expect(formatExposureCompensation(1.5)).toBe('+1 1/2ev');
expect(formatExposureCompensation(1.9960938)).toBe('+2ev'); expect(formatExposureCompensation(1.9960938)).toBe('+2ev');
// Ignore long fractions
expect(formatExposureCompensation(-0.119)).toBe('-0.12ev');
expect(formatExposureCompensation(-0.112340989)).toBe('-0.11ev');
expect(formatExposureCompensation(0.119)).toBe('+0.12ev');
expect(formatExposureCompensation(0.112340989)).toBe('+0.11ev');
expect(formatExposureCompensation(1.119)).toBe('+1.12ev');
expect(formatExposureCompensation(1.112340989)).toBe('+1.11ev');
expect(formatExposureCompensation(-1.119)).toBe('-1.12ev');
expect(formatExposureCompensation(-1.112340989)).toBe('-1.11ev');
expect(formatExposureCompensation(1.9595959)).toBe('+1.96ev');
}); });
}); });
}); });

View File

@ -42,9 +42,15 @@ export const formatNumberToFraction = (number: number) => {
const fraction = decimal !== 0 const fraction = decimal !== 0
? formatDecimalToFraction(Math.abs(decimal)) ? formatDecimalToFraction(Math.abs(decimal))
: ''; : '';
const sign = number > 0 ? '+' : '-'; const sign = number >= 0 ? '+' : '-';
const whole = integer > 0 // Ensure fractions are not too long
? fraction ? `${integer} ` : integer if (!fraction || fraction.length <= 4) {
: ''; const whole = integer > 0
return `${sign}${whole}${fraction}`; ? fraction ? `${integer} ` : integer
: fraction ? '' : '0';
return `${sign}${whole}${fraction}`;
} else {
const decimalFormatted = decimal.toPrecision(2).replace(/^-*0+/, '');
return `${sign}${integer}${decimalFormatted}`;
}
}; };