Преобразование этой формулы Excel в Javascript

#javascript #excel #excel-formula

#javascript #excel #excel-формула

Вопрос:

Мои знания Javascript очень ограничены, и мне было интересно, может ли кто-нибудь помочь мне преобразовать эту формулу Excel в Javascript.

Пожалуйста, ознакомьтесь с формулой ниже

 =ROUNDDOWN(
    IF(
        I7 = 10000,
        88.4% * (I7/107*7),
        IF(
            I7 = 20000,
            89.4 * (I7/107*7),
            IF(
                I7 = 40000,
                90.40 * (I7/107*7),
            )
        )
    ),
    0
)
 

I7 — это входные данные

В принципе, все, что находится между 10000 и 19999, использует 88,4% * (I7 / 107 * 7)

для 20000 и 39999 используется 89,4 * (I7 / 107 * 7)

40000 и выше используют 90,40 * (I7 / 107 * 7)

Округление до ближайшего целого числа и вывод

Заранее спасибо!

Комментарии:

1. И в чем проблема / вопрос?

2. «В основном все, что находится между 10000 и 19999 …» — это не то, что делает формула…

Ответ №1:

Я пишу здесь базовый код, чтобы вы могли следовать.

 function calCell(input) {
  var value;
  switch(true)
  {
    case input >= 10000 amp;amp; input < 20000 :
      value = Math.floor(88.4 / 100 * (input / 107 * 7));
    break;
    case input >= 20000 amp;amp; input < 40000 :
          value = Math.floor(89.4 / 100 * (input / 107 * 7));
    break;
    case input >= 40000 :
      value = Math.floor(90.4 / 100 * (input / 107 * 7));
    break;
    default:
    //I don't know what to do if your value < 10000, but you can put it here
    break;
  }
  return value;
}

console.log(calCell(12345));
 

Комментарии:

1. Фантастическое спасибо! Ниже 10000 может выводиться как N / A. Возможно ли добавить самый простой ввод и вывод HTML? Я ценю помощь!

2. С помощью return N / A вы можете добавить эту строку ниже //Я не знаю … значение = «N / A». Что касается HTML, я думаю, вам следует создать еще один вопрос по SO, это было бы лучше.

Ответ №2:

Максимально короткое и упрощенное!

 function RoundDown(num){
if (num >= 10000 amp;amp; num <20000) {num=num*88.4/100*107*7}
if (num >= 20000 amp;amp; num <40000) {num=num*89.4/100*107*7}
if (num >= 40000) {num=num*90.4/100*107*7}
return Math.floor(num)
}
 

Комментарии:

1. Куда делись 107 * 7?

2. 107 * 7 не равно 100,7

Ответ №3:

Это то, что вы спросили, а не то, что сделала формула

 const calculate = num => {
  if (num < 10000) return "N/A";
  num = num / 107 * 7;
  let pct = 1/100;
       if (num < 20000)  pct *= 88.4;
  else if (num < 30000)  pct *= 89.4;
  else if (num >= 40000) pct *= 90.40;
  return Math.round(num * pct)
}

console.log(
calculate(10),
calculate(10000),
calculate(15000),
calculate(25000),
calculate(50000)
) 

Комментарии:

1. он сказал, что между 10000 и 19999 и т. Д. … Не равно

2. Имя функции по-прежнему неверно (и имхо, этот ответ вообще не должен существовать)

3. пусть он исправит это, Андреас

4. @Eldshe Но это не то, что делает формула

5. вы могли бы сократить его еще больше;) также поместите первое «число» в ()