diff --git a/packages/components/input-number/__tests__/input-number.test.tsx b/packages/components/input-number/__tests__/input-number.test.tsx
index 8624a1facc..b78f40a476 100755
--- a/packages/components/input-number/__tests__/input-number.test.tsx
+++ b/packages/components/input-number/__tests__/input-number.test.tsx
@@ -36,6 +36,25 @@ describe('InputNumber.vue', () => {
expect(wrapper.find('p').element.innerText).toBeUndefined()
})
+ test('dynamic change the precision value should correct re-render', async () => {
+ const num = ref(123.12)
+ const precision = ref(1)
+ const wrapper = mount(() => (
+ <>
+
+ >
+ ))
+ await nextTick()
+ expect(wrapper.find('input').element.value).toEqual('123.1')
+ precision.value = 2
+ await nextTick()
+ expect(wrapper.find('input').element.value).toEqual('123.12')
+ })
+
test('set modelValue undefined to display placeholder', async () => {
const inputText = ref(1)
const wrapper = mount(() => (
diff --git a/packages/components/input-number/src/input-number.vue b/packages/components/input-number/src/input-number.vue
index 8ec36e2d6d..73ef96c3e8 100755
--- a/packages/components/input-number/src/input-number.vue
+++ b/packages/components/input-number/src/input-number.vue
@@ -358,6 +358,13 @@ watch(
},
{ immediate: true }
)
+
+watch(
+ () => props.precision,
+ () => {
+ data.currentValue = verifyValue(props.modelValue)
+ }
+)
onMounted(() => {
const { min, max, modelValue } = props
const innerInput = input.value?.input as HTMLInputElement