La suma de las relaciones de precios de verificación de todas las filas en la regla de verificación del formulario es 1 (problema de pérdida de precisión)

 El efecto de verificación normal es el siguiente (código modificado)

 

El blogger encontró un pequeño problema, pero pensó que podía registrarlo para evitar más problemas en el futuro. Estaba muy confundido cuando la suma ya era 1.

Como se muestra en la imagen, hice una pequeña función. La columna de relación de precios verifica las filas donde la suma de todas las filas es 1.

 

El código de la regla de verificación es el siguiente

Escrito en computado es activar la actualización de la regla de verificación al completar en tiempo real para verificar si es correcta.

  computed: {
    rules() {
      var testValid = (rule, value, callback) => {
        if (value <= 0) {
          return callback(new Error('不能填写小于等于0的数据'))
        }
        let flag = false
        let countArr = []
        if (this.list && this.list.length > 0) {
          this.list.forEach((item) => {
            if (item.priceRatio) {
              countArr.push(item.priceRatio)
            }
          })
        }

        const sum = (num) => {
          let i = 0,
            result = 0
          while (i < num.length) {
            result += Number(num[i])
            i++
          }
          return result
        }
        const sumlength = (num) => {
          let i = 0

          while (i < num.length) {
            i++
          }
          return i
        }
        let count = sum(countArr)
        let currentLength = sumlength(countArr)
        console.log('currentLength', currentLength)
        console.log('count', count)
        if ((count != 1 && currentLength == this.list.length) || count > 1) {
          flag = true
        }
        if (flag) {
          callback(new Error('价格比例相加不等于1'))
        } else {
          this.$refs['tabs'].clearTableValidate()
          callback()
        }
      }
      return {
        // 主表表单校验规则
        goodsCode: [
          { required: true, message: '此项为必填项', trigger: 'blur' },
        ],
        priceRatio: [
          {
            required: this.isRequired,
            message: '此项为必填项',
            trigger: ['blur', 'change'],
          },
          {
            validator: this.isRequired ? testValid : '',
            trigger: ['blur', 'change'],
          },
        ],
        giftQuantity: [
          { required: false, trigger: 'blur' },
          {
            pattern: /^([1-9][0-9]*)$/,
            message: '请输入正整数',
            trigger: 'blur',
          },
        ],
        quantity: [
          { required: true, message: '此项为必填项', trigger: 'blur' },
          {
            pattern: /^(0|\+?[1-9][0-9]{0,4})$/,
            message: '请输入不超过五位数的正整数',
            trigger: 'blur',
          },
        ],
      }
    },

Por esta razón imprimí los datos de la suma correspondiente y encontré que la suma resultó ser 0.99999, de repente me di cuenta de que había un problema de pérdida de precisión, por esta razón solo necesitaba modificarlo.

 

 const sum = (num) => {
          let i = 0,
            result = 0
          while (i < num.length) {
            result += Number(num[i])
            i++
          }
          return Number(result.toFixed(2)) // 将结果四舍五入到2位小数  解决精度丢失问题
}

Por fin puedes solucionar este pequeño problema

Supongo que te gusta

Origin blog.csdn.net/weixin_42125732/article/details/131452417
Recomendado
Clasificación