Расчет цены на основе пользовательского ввода React JS - PullRequest
0 голосов
/ 24 октября 2019

У меня есть функция, которая рассчитывает цену на основе квадратных метров и базовой цены.

Цена увеличивается на 10% за каждые 500 кв. Футов после 2000 кв. Все, что 2000sqft и ниже, составляет 149,99.

Функция ниже ...

checkPrice = () => {
   debugger;
   let base_price = 149.99;
      if(this.state.propertySqft > 2000){
   let overage = this.state.propertySqft - 2000;
   let percentage = Math.floor(overage % 500) * 10;
   base_price += base_price * percentage;
   this.setState({ totalPrice: base_price });

  }
}


проблема, с которой я столкнулся, заключается в том, что percentage выглядит как '0', если квадратные метры представляют собой круглое число, иmath.ceil(overage % 500), кажется, не работает должным образом.

например .... если бы я должен был добавить 5001 кв. так как percentage заканчивается только 10 вместо 60.

Если я введу 5000 кв. футов, percentage появится как «0», что имеет место для любого круглого числа, которое я ввожукак квадратные метры.

Кто-нибудь знает, что я здесь делаю неправильно или почему это не работает так, как я этого ожидаю?

1 Ответ

1 голос
/ 24 октября 2019

Оператор по модулю используется для получения расстояния до следующего нижнего кратного, например, 2006 % 500 будет 6, как 500 * 4 + 6 = 2006. Вы хотите разделить , чтобы получить 4 в этом случае: 2006 / 500 = 4.00..., а затем перевести его в следующее целое число.

Также, если вы умножите базовую цену на 10, вы неувеличить его на 10%, а точнее на 1000%. Вы, вероятно, хотите 0,1 ( 10 на сотню ).

Я бы написал так:

 const basePrice = 149.99;

 const checkPrice = () => {
  this.setState(({ propertySqft }) => { // asynchronous access to this.state is dangerous, use a callback!     
    const percentage = Math.max(
      0, // ensure that it only gets more 
      Math.floor((propertySqft - 2000) / 500) * (10 / 100)
    );

    return { totalPrice: basePrice * (1 + percentage),  };
  });
};
...