Я работаю над технической оценкой калькулятора ИМТ, но я застрял на стадии использования формулы. Инструкции по вычислению ИМТ следующие:
Instruction 1:
Each user's height is expressed in feet, so the calculation needs to first convert it to meters. HINT: multiple height by 0.3048.
Instruction 2:
BMEye calculates BMI with an advanced algorithm! BMEye has the notion of countries with the healthiest diet and they are Chad, Sierra Leone, Mali, Gambia, Uganda, Ghana, Senegal, Somalia, Ivory Coast, and Isreal . If the user is from any of these countries, then the calculated BMI figure is multipled by 0.82, bringing it down a little.
Last instruction:
Following the guide and hints above, get computeBMI to use the user's weight, height, and country to calculate and return the BMI value for the user.
Что я пытался сделать:
Я попытался запустить код в своем возвышенном тексте локального редактора, и он правильно вычисляет ИМТ, но когда я ввожу код в трекер оценок Google, который является платформой для оценки, он выдает ошибку: «Ваш расчет ИМТ неверен!»
Кто-нибудь может помочь мне найти исправление с этой ошибкой? Ниже приведена функция, которая получает объект пользователя, захватывая рост, вес и страну, чтобы помочь в вычислениях.
const computeBMI = ({weight, height, country}) => {
const LowBMIcountries = ["Chad", "Sierra Leone", "Mali", "Gambia",
"Uganda", "Ghana", "Senegal", "Somalia", "Ivory Coast", "Israel"];
const bmiRate = 0.82;
let ConvertHeight = height * 0.3048;
let BMI = weight / Math.pow(ConvertHeight,2);
if (LowBMIcountries.includes(country)) {
BMI *= bmiRate;
}
return Math.round(BMI, 2);
};
@mplungjan Этот вопрос на 100% в порядке.
Да, я думаю, что ему не хватает ожидаемого результата. Можем ли мы просто попросить ОП добавить некоторую информацию. Ваше редактирование неверно. Его функция принимает один объект с аргументами. Ваши звонки передают 3 параметра
Кроме того, вы внесли эти изменения, даже не зная единиц, используемых в этом расчете, нам нужен ОП, чтобы предоставить более подробную информацию.
@VLAZ, вес в килограммах, а рост в футах, которые перед расчетами следует преобразовать в метры, формула - вес / рост ^ 2
height:165 эти великаны ;)
@Emmanuel, ПОЖАЛУЙСТА, 1. Нажмите редактировать. 2. Щелкните редактор сниппетов [<>]. 3 Добавьте код ТОЧНО так, как вы его запускаете, с любыми изменениями, которые вы добавили, например, .toFixed. Также, пожалуйста, переместите массив LowBMIcountries за пределы функции - и правильно напишите Израиль.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В вопросе не упоминается округление, не говоря уже о том, что ваше использование Math.round неверно. Math.round принимает один аргумент и округляет до ближайшего целого числа. Если вам нужны две десятичные точки, используйте toFixed(2).
Хороший момент — в инструкциях не сказано, какое число возвращать, но Math.round будет возвращать только целые числа.
@mplungjan это потому, что вы внесли неправильные правки в исходный код, опубликованный OP.
@mplungjan, но... предлагаемое изменение работает. Мы просто не знаем, как выглядит проверка — может потребоваться три значащих цифры. Хотя исходный код предлагает это 2. Детали вопроса не уточняются.
@VLAZ да, я отметил его. Он вносит неправильные правки, вызывающие ошибки во время выполнения, даже не зная синтаксиса и выдвигая ложные обвинения. Эммануэль, Если возникнут дополнительные проблемы, дайте мне знать, и я помогу вам.
@mplungjan ранее в вашем комментарии говорилось, что .toFixed производит NaN.
Я пытался использовать return BMI.toFixed(2);, но ошибка сохраняется, не повезло
Каков ожидаемый результат и какой результат вы получите?
Что происходит, когда вы просто возвращаетесь BMI? Где написано, что нужно округлять?
Случайная мысль — возможно, функция должна вернуть количество, поэтому Number(BNI.toFixed(2)) может быть правильным выводом. Угадывая здесь - я не знаю, что такое ожидание...
@AvinKavish, для height : 6 и weight : 68,country: Mali я получаю вывод как BMI: 16.67, что верно, но система все еще выдает эту ошибку: Оооооооооооооооооооооооооооооооооооооооооооооооооооооооооо Ваш расчет ИМТ неверен. Ознакомьтесь с инструкциями и продолжите
Вы пробовали предложение @VLAZ преобразовать вывод обратно в число, Number(BMI.toFixed(2))? toFixed(2) преобразуется в строку. Вы также делаете Math.round(BMI * 100)/100, чтобы округлить до 2 знаков после запятой без разбора строки.
Так что я совершенно расстроен тем, что делать дальше.
Это работает return Number(BMI.toFixed(2)); так же, как return BMI.toFixed(2);, но ошибка не исправлена.
Я сделал это перед тем, как написать сюда.
[ссылка] (freecodecamp.org/forum/t/…) , в этой ветке нет ответа, когда вы переходите по ссылке.
Через пару дней я нашел правильный ответ на этот сложный вопрос, я знаю, что это будет полезно для других в будущем.
const computeBMI = ({weight, height, country}) => {
const countries = ["Chad", "Sierra Leone", "Mali", "Gambia", "Uganda",
"Ghana", "Senegal", "Somalia", "Ivory Coast", "Isreal"];
const hm = height * 0.3048;
const ratio = (countries.includes(country) ? 0.82 : 1);
const BMI = (weight / (hm * hm)) * ratio;
return parseFloat(BMI).toFixed(1);
};
изучите ниже..
entervar computeBMI = function({weight,height,country}) {
const bmiScale = 0.82;
let feetToMeter = 0.3048;
const countries = ['Chad','Sierra Leone','Mali','Gambia','Uganda',
'Ghana','Senegal','Somalia','Ivory Coast','Isreal'];
const heightinmeter = (height * feetToMeter);
let bim = ((weight)/(heightinmeter ** 2));
if (countries.includes(country)) {bim = bim * bmiScale}
var fixednum = bim.toFixed(1);
return fixednum;
}
В какой единице находится
weight? Фунты или килограммы? И какова фактическая формула для ИМТ?