修复浮点数计算精度问题
This commit is contained in:
parent
2acaed7a09
commit
ab7c159b01
@ -88,6 +88,38 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import dayjs from 'dayjs'
|
||||
// 精确浮点数加法函数
|
||||
const floatAdd = (a, b) => {
|
||||
var c, d, e;
|
||||
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
|
||||
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
|
||||
try {
|
||||
c = a.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
c = 0;
|
||||
}
|
||||
try {
|
||||
d = b.toString().split(".")[1].length;
|
||||
} catch (f) {
|
||||
d = 0;
|
||||
}
|
||||
e = Math.pow(10, Math.max(c, d));
|
||||
return (floatMul(a, e) + floatMul(b, e)) / e;
|
||||
};
|
||||
|
||||
// 精确浮点数乘法函数
|
||||
const floatMul = (a, b) => {
|
||||
var c = 0,
|
||||
d = a.toString(),
|
||||
e = b.toString();
|
||||
try {
|
||||
c += d.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
try {
|
||||
c += e.split(".")[1].length;
|
||||
} catch (f) {}
|
||||
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
|
||||
}
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const rows = ref<Record<string, any>[]>([])
|
||||
@ -95,12 +127,19 @@ const rows = ref<Record<string, any>[]>([])
|
||||
const nowDate = dayjs().format('YYYY-MM-DD')
|
||||
const duEmpName = computed(() => (rows.value[0] ? rows.value[0]['合立经手人'] ?? '' : ''))
|
||||
|
||||
const sumQuantity = computed(() =>
|
||||
rows.value.reduce((acc, cur) => acc + Number(cur['数量'] || 0), 0)
|
||||
)
|
||||
const sumTotal = computed(() =>
|
||||
rows.value.reduce((acc, cur) => acc + Number(cur['总价格'] || 0), 0)
|
||||
)
|
||||
// 计算总数量
|
||||
const sumQuantity = computed(() => {
|
||||
return rows.value.reduce((acc, cur) => {
|
||||
return floatAdd(acc, Number(cur['数量']) || 0)
|
||||
}, 0)
|
||||
})
|
||||
|
||||
// 计算总价格
|
||||
const sumTotal = computed(() => {
|
||||
return rows.value.reduce((acc, cur) => {
|
||||
return floatAdd(acc, Number(cur['总价格']) || 0)
|
||||
}, 0)
|
||||
})
|
||||
|
||||
const fmtDate = (v: any) => (v ? dayjs(v).format('YYYY-MM-DD') : '')
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user