parseFloat & toFixed возвращает только 1 десятичную точку - PullRequest
2 голосов
/ 30 апреля 2020

Работая над приведенным ниже, при регистрации «подсказок» массива кажется, что числа, помещенные в него, имеют только одну десятичную точку.

Перед добавлением в parseFloat он возвращает 2 десятичных знака, однако он был возвращен как строка После добавления parseFloat теперь кажется, что он возвращает только одну десятичную точку.

Спасибо.

var tips = [];
var calculateTip = function(bill) {
  switch (true) {
    case bill < 50:
      tips.push(parseFloat((bill * 0.2).toFixed(2)));
      break;
    case bill >= 50 && bill < 201:
      tips.push(parseFloat((bill * 0.15).toFixed(2)));
      break;
    default:
      tips.push(parseFloat((bill * 0.10).toFixed(2)));
  }
}
calculateTip(124);
calculateTip(48);
calculateTip(268);
console.log(tips);

Ответы [ 3 ]

3 голосов
/ 30 апреля 2020

Number.prototype.toFixed() возвращает string представление number, для которого вы вызываете его, с правильным количеством десятичных знаков, но если вы проанализируете его обратно в number с parseFloat, эти go исчезнет, ​​так как number не заботится о конечных нулях.

Это можно исправить, просто избавившись от parseFloat:

const tips = [];

function calculateTip(bill) {
  if (bill < 50)
    tips.push((bill * 0.2).toFixed(2));
  else if (bill >= 50 && bill < 201)
    tips.push((bill * 0.15).toFixed(2));
  else
    tips.push((bill * 0.10).toFixed(2));
}

calculateTip(124);
calculateTip(48);
calculateTip(268);

console.log(tips);
1 голос
/ 30 апреля 2020

Я переместил метод toFixed рядом с вашим parseFloat, и он вернул мне ожидаемый вами результат:

var tips = [];
var calculateTip = function(bill) {
    switch(true) {
        case bill < 50:
            tips.push(parseFloat((bill * 0.2)).toFixed(2));
            break;
        case bill >= 50 && bill < 201:
            tips.push(parseFloat((bill * 0.15)).toFixed(2));
            break;
        default:
            tips.push(parseFloat((bill * 0.10)).toFixed(2));
    }
}
calculateTip(124);
calculateTip(48);
calculateTip(217);
console.log(tips);
1 голос
/ 30 апреля 2020

Числа в Javascript выводятся на консоль с таким количеством знаков после запятой, сколько необходимо.

console.log(1.0000001)
console.log(1.1)

Все ваши числа отображаются только с одной десятичной точкой, поскольку они имеют только один десятичный знак. Вместо этого вы должны вернуть строку, если хотите показать их с заданной точностью c.

var tips = [];
var calculateTip = function(bill) {
  switch (true) {
    case bill < 50:
      tips.push((bill * 0.2).toFixed(2));
      break;
    case bill >= 50 && bill < 201:
      tips.push((bill * 0.15).toFixed(2));
      break;
    default:
      tips.push((bill * 0.10).toFixed(2));
  }
}
calculateTip(124);
calculateTip(48);
calculateTip(268);
console.log(tips);
...