Я делаю форму для добавления продукта с использованием VueJS и платформы Quasar.
У меня проблемы с вычислениями небольшим, но критическим способом. Иногда я получаю, что цена не соответствует цене, например 0,01. Я гуглил свой способ узнать, что есть Нечто с тем, как Javascript вычисляет десятичные значения, очевидно, не проблема с целочисленными значениями.
Я быстро сделал jsfiddle, где вы можете воссоздать мою проблему, добавив 100 в первое поле (цена), а затем изменив выбор НДС на что угодно (у скрипки есть ошибка, и она рассчитывается с ранее выбранным значением, а не с текущим).
Предполагается, что он останется равным 100, но вернет 100.01.
https://jsfiddle.net/5y60s2rk/18/
Вот код реального проекта
<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))
}
}
}
Я попытался round (), пытаясь избежать десятичных чисел путем умножения на 100, удаления десятичных дробей и повторного деления на правильное число. Но в какой-то момент у меня все равно получается умножение десятичной дроби, и это портит ее.
Спасибо, если вы зашли так далеко, я очень ценю, что вы уделили мне время.