From 53e730f8d5399a8172a03a525e4b831de2923627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=B5=B7?= <7836246@qq.com> Date: Mon, 12 Jan 2026 14:03:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=A3=E6=AC=BE?= =?UTF-8?q?=E6=97=B6=E6=B5=AE=E7=82=B9=E6=95=B0=E7=B2=BE=E5=BA=A6=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E4=BD=99=E9=A2=9D=E4=B8=8D=E8=B6=B3=E8=AF=AF?= =?UTF-8?q?=E5=88=A4=E5=92=8C=20-0.00=20=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/admin/user/UserBalanceModal.vue | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/admin/user/UserBalanceModal.vue b/frontend/src/components/admin/user/UserBalanceModal.vue index 1918577a..61d4785e 100644 --- a/frontend/src/components/admin/user/UserBalanceModal.vue +++ b/frontend/src/components/admin/user/UserBalanceModal.vue @@ -35,14 +35,22 @@ const emit = defineEmits(['close', 'success']); const { t } = useI18n(); const a const submitting = ref(false); const form = reactive({ amount: 0, notes: '' }) watch(() => props.show, (v) => { if(v) { form.amount = 0; form.notes = '' } }) -const calculateNewBalance = () => (props.user ? (props.operation === 'add' ? props.user.balance + form.amount : props.user.balance - form.amount) : 0) +const calculateNewBalance = () => { + if (!props.user) return 0 + const result = props.operation === 'add' ? props.user.balance + form.amount : props.user.balance - form.amount + // 避免浮点数精度问题导致的 -0.00 显示 + return result === 0 || Object.is(result, -0) ? 0 : result +} const handleBalanceSubmit = async () => { if (!props.user) return if (!form.amount || form.amount <= 0) { appStore.showError(t('admin.users.amountRequired')) return } - if (props.operation === 'subtract' && form.amount > props.user.balance) { + // 使用小数点后两位精度比较,避免浮点数精度问题 + const amount = Math.round(form.amount * 100) / 100 + const balance = Math.round(props.user.balance * 100) / 100 + if (props.operation === 'subtract' && amount > balance) { appStore.showError(t('admin.users.insufficientBalance')) return }