Цикл по объекту для выполнения математических вычислений до ближайшего высокого целого числа? - PullRequest
0 голосов
/ 08 марта 2020

Я ищу l oop через объект, получаю набор значений, а затем вычисляю разницу между этим значением и следующим целым числом.

Например, допустим, у меня есть этот объект:

const data = [
   {
      "uid": "1121212",
      "amount": {
         "money": 11.2
      },
      "sourceAmount": {
         "money": 2.2
      }
   },
   {
      "uid": "343343443",
      "amount": {
         "money": 222.30
      },
      "sourceAmount": {
         "money": 444
      }
   },
   {
      "uid": "44",
      "amount": {
         "money": 54.21
      },
      "sourceAmount": {
         "money": 32
      }
   }
]

Если возможно, я просматриваю l oop через это и получаю значение из клавиш amount.money, и определите разницу между этим числом и следующим целым числом. Таким образом, в приведенном выше примере можно было бы получить значения 11.22 & 222.30 & 54.21 и вычислить разницу до 12 223 и 55, поскольку это следующие значения. Таким образом, различия будут такими: 78 & 70 и 79. Эти значения (я думал) могут быть помещены в массив?

Я просматривал функцию map(), но изо всех сил пытаюсь сформировать то, что мне нужно? У меня есть что-то похожее на:

const difference = [];

for (let i = 0, l = data.length; i < l; i++) {
    var money = data.amount.money[i];
    let roundedNumber = Math.ceil(money);
    let d = function (money, roundedNumber) { return Math.abs(roundedNumber - money); }
    difference.push(d)
}

Я думаю, что это неудачная попытка, любая помощь по передовому опыту была бы отличной.

Массив различий должен выглядеть следующим образом: const difference = ['78', '70', '79']; или const difference = ['0.78', '0.70', '0.79'];

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Я думаю, что следующие комбинации с .map() и Math.ceil() могут работать:

const data = [ { "uid": "1121212", "amount": { "money": 11.2 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.21 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e => (Math.ceil(e.amount.money) - e.amount.money).toFixed(2));
console.log(result);

Первое значение 0.80 из-за 12 - 11.2.

Пожалуйста, найдите числа, проанализированные с Number.parseFloat():

const data = [ { "uid": "1121212", "amount": { "money": 11.2 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.21 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e => Number.parseFloat((Math.ceil(e.amount.money) - e.amount.money).toFixed(2)));
console.log(result);

Надеюсь, это поможет!

0 голосов
/ 08 марта 2020

Если вы хотите, чтобы в вашем result были целые числа, может помочь следующее. Применение round() к float_val*100 лучше, чем float_val.toFixed(2)*100, так как второй метод приведет к неточным результатам из-за ошибок округления.

const data = [ { "uid": "1121212", "amount": { "money": 11 }, "sourceAmount": { "money": 2.2 } }, { "uid": "343343443", "amount": { "money": 222.30 }, "sourceAmount": { "money": 444 } }, { "uid": "44", "amount": { "money": 54.216 }, "sourceAmount": { "money": 32 } } ]
const result = data.map(e =>Math.round(100*(1-e.amount.money%1))%100);
console.log(result);

Редактировать : После вашего комментария я добавил еще %100 к своей формуле. Я также изменил некоторые значения выборки, чтобы продемонстрировать поведение при округлении. Первое значение теперь возвращает 0, а последнее (измененное) значение 54.216 приведет к остатку 78,4, который затем будет округлен до 78.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...