#angular #typescript #numbers #parsefloat
#angular #typescript #числа #parsefloat
Вопрос:
Я считываю некоторые значения из mongodb, а затем у меня есть несколько вариантов, которые увеличивают цену. существует 2 типа опций, одиночных и множественных. если один, все операции выполняются гладко. если несколько, когда я считываю значение (например, «1.3»), синтаксический анализ с плавающей точкой возвращает 1.4000001, код, который это делает, выглядит следующим образом :
this.item.productPrice = parseFloat(this.item.productPrice) -
parseFloat(a.price);
и
this.item.productPrice = parseFloat(this.item.productPrice) parseFloat(a.price);
при использовании debugger в начале строки item.ProductPrice равно 1.3, но после синтаксического анализа оно становится 1.4000001 и добавляет a.price
полный кодовый блок
//this one takes the selection and adds it to selectedparams array
selected(ev: any) {
debugger;
const a = JSON.parse(ev);
if (a.multiple) {
if (Array.isArray(this.selectedparams[a.paramName])) {
const va = !a.value;
const index = this.objectinArray(this.selectedparams[a.paramName], {
option: a.option,
price: a.price,
value: va
});
if (index !== -1) {
this.item.productPrice = parseFloat(this.item.productPrice) - parseFloat(a.price);
this.selectedparams[a.paramName].splice(index, 1);
this.zone.run(() => {});
} else {
this.selectedparams[a.paramName].push({ option: a.option, price: a.price, value: a.value });
this.item.productPrice = parseFloat(this.item.productPrice) parseFloat(a.price);
this.zone.run(() => {});
}
} else {
this.selectedparams[a.paramName] = [];
this.selectedparams[a.paramName].push({ option: a.option, price: a.price, value: a.value });
this.item.productPrice = this.item.productPrice parseFloat(a.price);
console.log('hereeeeeeeeeeeeeeeee', this.item.productPrice);
this.zone.run(() => {});
}
} else {
this.selectedparams[a.paramName] = { selected: a.selected, price: a.price };
}
this.calcPrice();
}
//this one dows the calculation after adding
calcPrice() {
const keys = Object.keys(this.selectedparams);
console.log(this.item);
let newprice = this.item.productPrice;
keys.forEach(el => {
if (Array.isArray(this.selectedparams[el])) {
this.selectedparams[el].forEach((i: any) => {
newprice = newprice parseFloat(i.price);
});
} else {
newprice = newprice parseFloat(this.selectedparams[el].price);
}
});
this.showPrice = newprice;
}
Комментарии:
1. Какое значение
this.item.productPrice
перед добавлениемparseFloat(a.price)
к нему?2. @gari this.item.ProductPrice не совпадает с .price. this.item.ProductPrice = 1.3 a.цена = 0.10 итого дополнительно становится = 1.5, а если я удалю его 1.2
Ответ №1:
TLDR (математика позади) — вы могли бы использовать функцию .toFixed():
var result = parseFloat('0.1') parseFloat('1.3');
console.log(result.toFixed(1)); // 1.4
var result = parseFloat('0.1') parseFloat('1.3');
console.log(result); // 1.400000001