如何避免javascript中的十进制错误?

如何避免javascript中的十进制错误?,javascript,vue.js,math,quasar,Javascript,Vue.js,Math,Quasar,我正在使用VueJS和Quasar框架制作一个用于添加产品的表单 我在计算方面遇到了一些小问题,但很关键。 有时我会发现产品的价格有问题,比如.01。我用谷歌搜索我的方法发现Javascript计算十进制值的方式有问题,显然不是整数值的问题 我很快制作了一个JSFIDLE,您可以通过在第一个字段(价格)中添加100,然后将VAT select更改为任何值(FIDLE有一个错误,并使用以前选择的值而不是当前值进行计算)来重新创建我的问题 它应该保持在100,但返回100.01 这里是来自真实项目

我正在使用VueJS和Quasar框架制作一个用于添加产品的表单

我在计算方面遇到了一些小问题,但很关键。 有时我会发现产品的价格有问题,比如.01。我用谷歌搜索我的方法发现Javascript计算十进制值的方式有问题,显然不是整数值的问题

我很快制作了一个JSFIDLE,您可以通过在第一个字段(价格)中添加100,然后将VAT select更改为任何值(FIDLE有一个错误,并使用以前选择的值而不是当前值进行计算)来重新创建我的问题

它应该保持在100,但返回100.01

这里是来自真实项目的代码

   <q-input
    v-model="product.price"
    type="number"
    @input="updatePriceIncVat"
  />

  <q-input
    v-model="product.price_vat"
    type="number"
    @input="updatePriceExclVat"
  />

  <q-select
    v-model="product.vat"
    :options="selectVat"
    emit-value
    map-options
    @input="updatePriceExclVat"
  />

  data () {
    return {
      product: {
        price: '',
        price_vat: '',
        vat: 1.24
      },
      selectVat: [
        {
          label: '0%',
          value: 1
        },
        {
          label: '10%',
          value: 1.10
        },
        {
          label: '14%',
          value: 1.14
        },
        {
          label: '24%',
          value: 1.24
        }
      ]
  }
  methods: {
    updatePriceIncVat () {
      this.product.price_vat = Number((this.product.price / this.product.vat).toFixed(2))
    },
    updatePriceExclVat () {
      this.product.price = Number((this.product.price_vat * this.product.vat).toFixed(2))
    }
  }
}

数据(){
返回{
产品:{
价格:'',
价格/增值税:'',
增值税:1.24
},
选择增值税:[
{
标签:“0%”,
价值:1
},
{
标签:“10%”,
价值:1.10
},
{
标签:“14%”,
价值:1.14
},
{
标签:“24%”,
价值:1.24
}
]
}
方法:{
updatePriceIncVat(){
this.product.price_vat=编号((this.product.price/this.product.vat).toFixed(2))
},
UpdatePriceExcluvat(){
this.product.price=编号((this.product.price_vat*this.product.vat).toFixed(2))
}
}
}
我已经试过了 round(),尝试通过与100相乘、删除小数并再次除以正确的数字来避免小数。但在某个时刻,我还是会乘以一个小数点,这会把事情搞砸


谢谢你,如果你来了这么远,我真的很感谢你利用你的时间来帮助我。

input,100.00=>80.65,input 100.01结果保持不变80.65,检查了其他几个增值税计算器,它们的行为相同,别担心)这是累积舍入错误。如果你把
换成
@input
,这有意义吗?我还发现增值税计算器也有同样的问题。但对我来说,这不仅仅是一个计算器,它设定了产品的价格。有时一个价值25,00欧元的产品会显示为25,01欧元。这是一个很小的区别,但很关键,因为应用程序生成发票,你不能发送错误的发票,即使是通过1cAnatoly,great thx,你知道如何处理它吗?输入,100.00=>80.65,输入100.01结果保持不变80.65,检查了其他几个增值税计算器,它们的行为相同,别担心)这是累积舍入错误。如果你把
换成
@input
,这有意义吗?我还发现增值税计算器也有同样的问题。但对我来说,这不仅仅是一个计算器,它设定了产品的价格。有时一个价值25,00欧元的产品会显示为25,01欧元。这是一个很小的区别,但很关键,因为应用程序会生成发票,即使通过1 Canatoly,great thx,您也不能发送错误的发票,您知道如何绕过它吗?