diff --git a/packages/vant/src/stepper/Stepper.tsx b/packages/vant/src/stepper/Stepper.tsx index 09d3f3df6..18958ec4d 100644 --- a/packages/vant/src/stepper/Stepper.tsx +++ b/packages/vant/src/stepper/Stepper.tsx @@ -91,6 +91,11 @@ export default defineComponent({ return value; } + // format scientific number + if (typeof value === 'number' && String(value).includes('e')) { + value = value.toFixed(decimalLength ? +decimalLength : 17); // 17 is the max precision of a JS number + } + value = formatNumber(String(value), !props.integer); value = value === '' ? 0 : +value; value = Number.isNaN(value) ? +min : value; diff --git a/packages/vant/src/stepper/test/index.spec.ts b/packages/vant/src/stepper/test/index.spec.ts index b9801acf5..817cb609c 100644 --- a/packages/vant/src/stepper/test/index.spec.ts +++ b/packages/vant/src/stepper/test/index.spec.ts @@ -455,3 +455,30 @@ test('should allow input be to empty when using allow-empty prop', async () => { await input.trigger('blur'); expect(wrapper.emitted('update:modelValue')![0]).toEqual([1]); }); + +test('scientific number', async () => { + const wrapper = mount(Stepper, { + props: { + min: 0, + modelValue: 9.9e-7, + }, + }); + + const input = wrapper.find('input'); + + expect(input.element.value).toEqual('9.9e-7'); +}); + +test('scientific number with decimal length', async () => { + const wrapper = mount(Stepper, { + props: { + min: 0, + modelValue: 9.9e-7, + decimalLength: 8, + }, + }); + + const input = wrapper.find('input'); + + expect(input.element.value).toEqual('0.00000099'); +});