brewhaha
brewhaha

Reputation: 43

New to Javascript calculations

I'm BRAND new to javascript so this is probably an easy fix I can't figure out.

I'm writing a easy script to calculate age 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 isn't calculating age + 7. It's writing the age + 7. So if I write 15 in the age prompt it will print in the browser 157.(15) and (7) Which i understand and know why. but how do I get it to compute the math.

It's actually returning 1573.75155

thanks

Upvotes: -1

Views: 149

Answers (5)

emanuel.virca
emanuel.virca

Reputation: 598

the age is going to be treated as string so string plus int result in string you have to convert age to int :

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

updated...

Upvotes: 0

Marcus Stade
Marcus Stade

Reputation: 4984

Like what everyone's been saying, prompt returns a string so it needs to be converted. There are a number of ways to do this, some of which have already been mentioned:

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

These are probably the most common and depending on context also quite possibly the most clear and intuitive ways of doing it. There are also a couple of very terse and interesting ways of converting strings to numbers, depending on which kind of number you'd like. For instance, to convert a number in a string to a float, you can prefix it with the + operator:

+'1.23'

This can seem really counter intuitive, particularly since 4 + '1.23' will actually return 41.23. So what's going on? Well, the + operator, when used as a unary operator (that is, it only has one operand on the right hand side) will always convert the operand value to a number. Compare these two (try them in a javascript console):

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

In contrived examples such as this, it really reads rather badly so you might not want to use this trick everywhere. But in your code, it reads quite well:

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

If you understand the workings of the unary plus operator (it really isn't rocket surgery) then you can get some nice terse but quite comprehensible results.

The unary + operator will always convert the value to a Number, i.e. floating point. Now, you might want an integer instead, in which case you can use the bitwise not operator twice, like so:

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

This operator first converts the value to an integer, and then returns the bitwise complement of the value, meaning all the bits are inverted. Using it twice will mean that we get the complement's complement, i.e. the original value but this time as an integer instead of a float.

Hope this was informative!

Upvotes: 1

user1864610
user1864610

Reputation:

Your prompt is returning your number as a string, so when you calculate 15 + 7 it's actually just concatenating "7" on to "15".

You need to convert your string to an number:

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);

Upvotes: 0

cjc343
cjc343

Reputation: 3765

Use either parseInt(age) or parseFloat(age) depending on whether you want to accept non-integer ages.

Upvotes: 0

Joren
Joren

Reputation: 3297

Right now Javascript handles the input as a string, so age is a string. You're gonna want to convert that to an int using the function parseInt(age).

Official documentation

Also, I'd suggest you read this about types in JS

Upvotes: 0

Related Questions