Я пишу базовую функцию для завершения действия Space Age (легко) exercism.io. Функция, которую я написал, возвращает правильный номер, но в виде строки, может кто-нибудь посоветовать, почему?
Я знаю, что это, вероятно, простой ответ, но я потерялся даже после запуска инструмента отладчика и поиска вопросов о переполнении стека.
Пожалуйста, не предлагайте решение упражнения, так как я хотел бы выяснить это самостоятельно.
Я читал похожие вопросы о переполнении стека, например: Числовая функция, возвращающая строку
var age = (planet, seconds) => {
var orbitalPeriod;
const solarsystem = {
earth : 1,
mercury : 0.2408467,
venus : 0.61519726,
mars : 1.8808158,
jupiter : 11.862615,
saturn : 29.447498,
uranus : 84.016846,
neptune : 164.79132
}
orbitalPeriod = solarsystem[planet];
return (seconds / 31557600 / orbitalPeriod).toFixed(2);
}
age('mercury',2134835688);
// returns "280.88"
Я также пробовал использовать Number и parseFloat для переменной orbitalPeriod и возвращать значение, например:
orbitalPeriod = Number.parseFloat(solarsystem[planet]);
return Number.parseFloat(seconds / 31557600 / orbitalPeriod).toFixed(2);



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


Используйте parseFloat после toFixed.
Примечание: Нет необходимости ставить Number перед parseInt или parseFloat они находятся на window объекте.
return Number.parseFloat((seconds / 31557600 / orbitalPeriod).toFixed(2));
Или используйте Unary Plus +.
return +((seconds / 31557600 / orbitalPeriod).toFixed(2));
Спасибо за ваш ответ, я проголосовал за упоминание метода унарного плюса.
Вы должны использовать parseFloat для всего вывода. как в вашем вопросе вы использовали
.toFixed(2) который вернет строку. вам нужно добавить parseFloat ко всему результату.
var age = (planet, seconds) => {
var orbitalPeriod;
const solarsystem = {
earth : 1,
mercury : 0.2408467,
venus : 0.61519726,
mars : 1.8808158,
jupiter : 11.862615,
saturn : 29.447498,
uranus : 84.016846,
neptune : 164.79132
}
orbitalPeriod = solarsystem[planet];
return parseFloat((seconds / 31557600 / orbitalPeriod).toFixed(2));
}
var ageVal = age('mercury',2134835688);
console.info(ageVal, typeof(ageVal));Я предполагаю, что OP говорит "Пожалуйста, не предлагайте решение упражнения, так как я хотел бы выяснить это самостоятельно."
Спасибо за быстрый ответ. Я вижу, я неправильно использовал метод toFixed.
toFixedвозвращает строку, вот и все.