From a970c485fb17c34926b8e2f0b4b9c4c8ce24561b Mon Sep 17 00:00:00 2001 From: lukaonik Date: Mon, 27 Dec 2021 17:34:13 +0400 Subject: [PATCH] fix: calculatePercentage returns NAN when min,max,value are 0 Fixes #23913 --- src/material/slider/slider.spec.ts | 7 +++++++ src/material/slider/slider.ts | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/src/material/slider/slider.spec.ts b/src/material/slider/slider.spec.ts index a9acb3be6232..7ff14c327690 100644 --- a/src/material/slider/slider.spec.ts +++ b/src/material/slider/slider.spec.ts @@ -438,6 +438,13 @@ describe('MatSlider', () => { expect(sliderInstance.percent).toBe(1); }, ); + + it('should calculate percentage propertly when min,max,value are zero', () => { + sliderInstance.value = 0; + sliderInstance.min = 0; + sliderInstance.max = 0; + expect(sliderInstance.percent).toBe(1); + }); }); describe('slider with set value', () => { diff --git a/src/material/slider/slider.ts b/src/material/slider/slider.ts index 4fb7650df091..6bbcafbf1e4e 100644 --- a/src/material/slider/slider.ts +++ b/src/material/slider/slider.ts @@ -874,6 +874,12 @@ export class MatSlider /** Calculates the percentage of the slider that a value is. */ private _calculatePercentage(value: number | null) { + //when min,max,value are all zero, the fraction becomes NAN, because we divide 0/0 + // so we have to explicitely return 1 in this case + if (value === 0 && this.min === 0 && this.max === 0) { + return 1; + } + return ((value || 0) - this.min) / (this.max - this.min); }