【问题标题】:expected number, but returning string [duplicate]预期数字,但返回字符串 [重复]
【发布时间】:2019-09-27 23:39:03
【问题描述】:

我正在编写一个基本函数来完成 exercism.io 的 Space Age(easy) 活动。我写的函数返回正确的数字,但是作为一个字符串,有人能告诉我为什么吗?

我知道这可能是一个简单的答案,但即使在运行调试器工具并搜索堆栈溢出问题之后,我也会迷失方向。

请不要为练习提供解决方案,因为我想自己解决这个问题。

我已经阅读过类似标题的关于堆栈溢出的问题,例如: Number function returning string

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"

我也尝试过在 orbitalPeriod 变量上使用 Number 和 parseFloat 并返回如下值:

    orbitalPeriod = Number.parseFloat(solarsystem[planet]);

    return Number.parseFloat(seconds / 31557600 / orbitalPeriod).toFixed(2);

【问题讨论】:

  • toFixed 返回一个字符串,就是这样。

标签: javascript string function numbers javascript-objects


【解决方案1】:

toFixed 之后使用parseFloat

注意:不需要在parseIntparseFloat之前放置Number,它们在window对象上。

return Number.parseFloat((seconds / 31557600 / orbitalPeriod).toFixed(2));

或使用一元加号+

return +((seconds / 31557600 / orbitalPeriod).toFixed(2));

【讨论】:

  • 感谢您的回复,我对提到一元加法表示赞成。
【解决方案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.log(ageVal, typeof(ageVal));

【讨论】:

  • 我的猜测是因为 OP 说“请不要为练习提供解决方案,因为我想自己解决这个问题。
  • 感谢您的快速回复。我明白了,我错误地使用了 toFixed 方法。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-03-04
  • 2019-08-29
相关资源
最近更新 更多