Javascript计算新手

时间:2013-10-24 22:44:47

标签: javascript math

我是javascript的新手,所以这可能是一个我无法弄清楚的简单修复。

我正在写一个简单的脚本来计算年龄Leapyear,Dog years and plus Five。

var age = prompt ("what's your age?");

var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

document.write(dog, leapyear, plusFive);

JS没有计算年龄+7。它正在写年龄+7。所以如果我在年龄提示中写15,它将在浏览器157中打印。(15)和(7)我理解并知道为什么。但是如何让它来计算数学。

它实际上是返回1573.75155

感谢

5 个答案:

答案 0 :(得分:1)

就像大家一直在说的那样,prompt返回一个字符串,因此需要进行转换。有很多方法可以做到这一点,其中一些已经提到:

parseInt('123')
parseFloat('123')
Number('123')

这些可能是最常见的,取决于上下文也很可能是最清晰直观的方法。还有一些非常简洁有趣的将字符串转换为数字的方法,具体取决于您想要的数字类型。例如,要将字符串中的数字转换为浮点数,可以使用+运算符作为前缀:

+'1.23'

这看起来非常直观,特别是因为4 + '1.23'实际上会返回41.23。发生什么了?好吧,+运算符在用作unary operator时(也就是说,它只在右侧有一个操作数)将始终将操作数值转换为数字。比较这两个(在javascript控制台中尝试它们):

4 + '1.23' // returns 41.23
4 + +'1.23' // returns 5.23; the second + is a unary operator

在诸如此类的人为设计的例子中,它确实读得相当糟糕,所以你可能不想在任何地方使用这个技巧。但是在你的代码中,它读得很好:

var age = +prompt("What's your age?")
var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

如果您了解一元加运算符(它实际上不是火箭手术)的运作方式,那么您可以获得一些不错的简洁但结果非常容易理解。

一元+运算符将始终将值转换为Number,即浮点数。现在,您可能需要一个整数,在这种情况下,您可以使用bitwise not operator两次,如下所示:

4 + ~~'1.23' // returns 5; note the double operator

此运算符首先将值转换为整数,然后返回值的bitwise complement,这意味着所有位都被反转。使用它两次意味着我们得到补码的补码,即原始值,但这次是整数而不是浮点数。

希望这是有用的信息!

答案 1 :(得分:0)

现在Javascript将输入作为字符串处理,因此age是一个字符串。您将要使用函数parseInt(age)将其转换为int。

Official documentation

另外,我建议你阅读this关于JS中的类型

答案 2 :(得分:0)

使用parseInt(age)parseFloat(age),具体取决于您是否要接受非整数年龄。

答案 3 :(得分:0)

您的提示会将您的号码作为字符串返回,因此当您计算15 + 7时,它实际上只是将“7”连接到“15”。

您需要将字符串转换为数字:

var age = prompt ("what's your age?");
age = parseInt(age,10);     // Converts to an integer
                            // parseFloat(age) will allow fractional ages

var dog = age + 7;
var leapyear = age / 4;
var plusFive = age + 5; 

document.write(dog, leapyear, plusFive);

答案 4 :(得分:0)

将年龄视为字符串,因此字符串加上int得到字符串,您必须将age转换为int:

var age= parseInt(prompt("what's your age"));

...更新